3

テストHttp connectionしていますが、動作がおかしいことがわかりました。I want to test whether the http connect will continue after network is enabled/disabled. これをテストする唯一の方法は、ネットワーク アダプターを無効にすることです。

たとえば、ボタンを押して http 接続を開始する前に、最初にネットワーク アダプターを無効にし、コードが実行された後、ネットワーク アダプターhttp.connect()を再度有効にします (許可されたタイムアウト内で) が、最後にタイムアウトがまだスローされます。接続はタイムアウト前でも有効だと思いましたか?

3G が短時間利用できない場合、最近のモバイル アプリ (Android、IOS) は多くのネットワーク ダウンを克服する必要があるため、この問題をどのように処理しますか。

4

1 に答える 1

1

はいといいえ。

実際、これは非常に多くの異なるコンポーネントに依存しているため、答えは非常に困難です。

1 つの実用的な例: ネットワーク接続が確立され、その後ダウンして再起動されるとします。まだ途中にパケットがあり、再起動後にターゲットに到達します。現在、TCP のエラー訂正システムが単純に追いつき、接続が継続する可能性があります。コンピュータからイーサネット ケーブルを取り外し、数秒後に再接続すると、これが機能することがわかります。BUT: 通常、モバイル デバイスは再接続のために新しい IP を取得するため、それが不可能になります。

デバイスとネットワークの間には、ルーター、透過プロキシ、ファイアウォールなどの多くのコンポーネントがあります。これらにはすべて異なるタイムアウトがあり、接続を停止またはドロップできる送信メッセージもあれば、そうでないものもあります。そのようなメッセージをブロックするものさえあります。したがって、それは可能ですが、信頼できません。

あなたの例:connect()ネットワークがダウンしているときに a を実行すると、通常は即時の拒否が予想されます。ただし、DNS がここで遅延を引き起こす可能性があるため、代わりにタイムアウトが発生します。connect()回線が再びオンラインになったときに、ダウンタイム中に a が自動的に継続する場合があるとは思えません。

于 2013-01-05T13:00:34.543 に答える