2016-05-18 6 views
1

私はswiftを使用してIOSアプリケーションを作成しています。 最近、私は変なバグに遭遇しました。 URLが有効かどうかを確認しようとしているので、私はurlでリクエストを作成してレスポンスをチェックしています。私はNSUrlSessionのdataTaskWithRequestでこの作業を行います。 URLがalibabaの場合、応答時間が長い(20秒以上)ことがあります。 なぜそれが起こりますか? 私の知る限り、それはこの特定のURLだけで起こります。 これは必須ではありませんが、ここにいくつかのコードがあります。dataTaskWithRequestが非常に特定の文字列で長すぎます

let request = NSMutableURLRequest(URL: validatedUrl) 
     request.HTTPMethod = "HEAD" 

     let session = NSURLSession.sharedSession() 

     let task = session.dataTaskWithRequest(request){ data, response, error in 
      // The response here returns after a very long time 
      let url = request.URL!.absoluteString 

私はいくつかの助けていただきありがとうございます!

+0

これは意味をなさない。 結果がないかどうかチェックするので、タイムアウトは同じ応答を引き起こすので、私にとってはうまくありません(そして、それはまだ待ち時間がありません) さらに、他の文字列では起こりません、それはそれであることができません。 –

答えて

0

インターネット経由でURLのコンテンツを取得しています。これが起こる速度は任意です。これは、ホスト名、要求に応答するWebサーバーの速度、ユーザーのインターネット接続の速度、およびその間のすべてのネットワークの速度を検索するDNSサーバーの速度に依存します。

3分以内に成功するか、タイムアウトすると見なすことができます。セルラーネットワークでは20秒も珍しくありません。

このURLを使って何をやっているのか、なぜそれをやっているのか考え直すか、少なくともURLを取得している間ユーザーを待たせないようにする方法を考えてみてください。

+0

ちょっと、 このコードは、私のアプリケーション内のブラウザの実装に使用されています。 ユーザーは任意のURLを入力します。見つからない場合は、Google検索のためにリダイレクトされます。これは私がそうすることができると思う方法です、あなたはどのように私はこの問題を回避することができますか、多分別のアプローチで考えていますか? –

+0

これはおそらく、ユーザーを待たせる唯一の妥当な理由です。結局のところ、ユーザーはそのページをリクエストしており、おそらくそのページが表示されることを期待しています。もし私がそれを実装していたら、おそらく5秒のタイマーを設定し、サーバからの最初の応答( '' didReceiveResponse:... '')を受け取っていなければ、 A.それが一時的なネットワークの不具合であるか、B.永続的な問題であるかどうか。 – dgatwood

+0

Googleのgenerate_204サイトと元のURLの2つの追加データタスクを同時に開けてみてください。 URLで2回目の試行が200で応答する場合は、元の要求をキャンセルして結果を表示します。元の要求が完了した場合は、追加の要求をキャンセルして結果を表示します。 5秒後に、追加要求のいずれも応答しなかった場合は、ネットワークが停止しているため、要求を取り消します。 – dgatwood

関連する問題