8

私は、ビジネスサーバーのシンクライアントとして機能するiOSアプリケーションに取り組んでいます。サーバーに送信されるリクエストはたくさんあり、ダウンロードされるデータもたくさんあります。

私は派手なリクエストフレームワークを使用せずNSURLConnection、デリゲートと非同期にするだけです。

アプリケーションは通常、 wifiと3Gの両方で非常にうまく機能しますが

一部のユーザーは、3G(米国)を使用しているときにランダムに切断されると報告しています。すべてのリクエストは問題ありませんが、「ホストに接続できません」(-1004)エラーでリクエストが失敗することがあります。

これはユーザーエクスペリエンスに大きく影響します。

いくつかの事実:

  1. Wi-Fiでは発生しません
  2. ユーザーは、3Gを使用している場合、他のアプリケーションでは発生しないと報告しています。
  3. これはタイムアウトの問題ではありません。接続を開始してから0.3〜1.0秒後にエラーが表示されます。
  4. tracerouteを使用して問題を再現することはできませんでした。
  5. ホストを使用SCNetworkReachabilityすることは到達可能であるように見えます(私はこのAPIの制限を知っています)。

質問問題の原因は何でしょうか?3Gとwifiではどのような接続プロパティが異なる可能性がありますか?どうすればデバッグできますか?

現在私が見ている唯一の解決策は、前のリクエストが失敗した場合にリクエストを再送信しようとすることです。ただし、まずは問題の原因を突き止めたいと思います。

編集問題はおそらく私たちのルーターの1つが原因でした。IT担当者はまだ問題を調査しています。

4

3 に答える 3

4

すべてのエラーコードは、Appleのドキュメントのセクションにあります。

CFNetworkエラーコードリファレンス

コード-1004は次のようにのみ記述されています

kCFURLErrorCannotConnectToHost

ホストに接続できないため、接続に失敗しました。OSXv10.6以降で利用できます。CFNetworkErrors.hで宣言されています。

これは基本的に、ユーザーが接続している(フライトモードになっていない、データトラフィックがオンになっている、電話がネットワークに登録されている、有効なURLを持っているなど)が、サーバーへの接続が積極的に阻止されたことを意味します。サーバーが応答していなかった場合は、説明したように、待機時間が長くなった後、タイムアウトエラーのようなものが発生したはずです。この種のエラーは、サーバーへのトラフィックを妨げる何かが原因である可能性があり、たとえば、ユーザーがファイアウォールまたはプロキシの背後にいる場合に発生する可能性があります。

この問題は、特に一部のユーザーに問題がなく、他のユーザーにランダムな問題がない場合は、実際にはプロバイダーが原因である可能性があります。

他のポスターが言ったように、あなたは彼らのサービスプロバイダーについて、そして彼らの場所についてのより多くの詳細、または彼らがエラーを起こしたとき(車に座っているか田舎で悪いレセプションを持っているなど)彼らが何をしていたかについてあなたのユーザーに尋ねることを試みることができます

パターンが見つからず、エラーが実際にランダムに発生し、一部のユーザーのみが発生する場合、そしてたまにしか発生しない場合は、携帯電話が保証されないという事実によって引き起こされる可能性のある別の避けられない問題であると考えます。常に接続されていること、そして一部の携帯電話プロバイダーは、そこに配信されるべきすべてのパッケージの100%を常に配信するとは限らないこと...あなたがする必要があるのは、エラーを処理することだけです。

少なくとも十分な回数の再試行が完了するまで、エラーを再試行してユーザーに表示しないことで、エラーを解消します。

最後に考慮すべきこと:

アプリから大量のリクエストと大量のデータを送信する場合は、大量の未完成のリクエストをスパムすることで「過剰消費」していないことを確認してください。これにより、他のリクエストへの応答が忙しすぎるため、サーバーまたは一部のプロキシサーバーがリクエストを拒否する可能性があります。リクエストが拒否されると、そのようなエラーが発生する可能性があります。ユーザーのデバイスが「呼吸」する時間を確保できるように、適切な量のリクエストを送信するようにしてください。

再試行スキームを賢明なものにして、短時間で何度も再試行することから始め、失敗し続ける場合は、次の再試行までの時間を増やします。

于 2012-08-03T14:25:06.220 に答える
3

アプリケーションにのみ影響しているという仮定を再検討します。問題がインターネット接続にある場合でも、ユーザーがアプリケーションの問題のみを確認する方法はたくさんあります。たとえば、おそらく他のアプリケーションは透過的に再試行します。ユーザーには、更新速度が遅くなるだけです。または、接続が切断されても、他のアプリケーションには関係ない場合があります。

影響を受けるユーザーに、使用しているプロバイダーを尋ねましたか?それらすべてが同じモバイルネットワークを使用している場合、それはアプリケーションではなくネットワークに問題があることを示しています。

于 2012-08-03T14:00:59.367 に答える
2

この理由は、単にセルラーデータとインターネットアクセスの性質にあるように思われます。ご存知かもしれませんが、セルラー接続を使用している場合、特に移動している場合は、ブロードキャストタワーが変更されると、接続によってネットワークが切り替わります。

大量のデータを短い間隔でダウンロードしているとのことですが、これによりアプリケーションがこの問題を起こしやすくなると思います。他のアプリでは発生しないことを1秒間受け入れません。タイミング。

于 2012-08-03T14:06:25.027 に答える