2

HTTP 経由で長いポーリング スキームを使用するアプリがあります (ただし、この質問は TCP ベースのプロトコルに適用される可能性があります)。タイムアウトはかなり長く、30 分程度です。

モバイル デバイスが IP から IP へとかなり頻繁に (1 分おきに) ホップすることが時々見られます。これにより、数十の長期間有効なソケットがサーバーに蓄積されます。これが必要以上の負荷を引き起こしていると思わざるを得ません。

そのため、一部の IP ゲートウェイは、デバイスがホップオフしたときに接続を閉じるのに優れていると推測しています。これに対処するために私が考えることができる戦略は次のとおりです。

  • タイムアウトを減らす (デバイスのバッテリー寿命を延ばす)
  • ユーザーの再接続時に、最後にアクティブだった接続を閉じる (Cookie またはユーザー ID の追跡が必要)

他のもの?

4

2 に答える 2

1

サーバーでCookieまたは何らかのIDを使用して、最後のアクティブな接続を閉じることを検討します。はい、もっと手間がかかりますが、ユーザーがアドレスをホップするとすぐに、古いソケットを見つけてリソースをすぐにクリーンアップできます。ユーザー名などに結び付けるのはかなり簡単なはずです。

ユーザー機器がアドレスをホッピングしていない場合でも発生する可能性のあるその他の問題、一部のモバイル ネットワーク、およびおそらく独自のネットワークには、未使用のソケットをクリーンアップするステートフル ファイアウォールがある場合があります。 syn/syn-ack を再度要求します。接続の問題に気付いている場合は、心に留めておくべきことがあります。

キープアライブを使用することに決めた場合は、攻撃的になりすぎないでください。おしゃべりなアプリケーションはモバイル ネットワークの疫病であり、サーバーへの接続が失われたときにネットワークに打撃を与えるアプリケーションは、ネットワークにあらゆる種類の問題を引き起こす可能性があります (キャリアが追いついた場合はあなた)。少なくとも、接続を再試行するための一種のバックオフ メカニズムがあり、デバイスが毎分 IP アドレスを切り替えている理由を見つけようとすることさえあります。正常に機能している場合、それは発生しないはずです。

***私はカナダの携帯電話会社で働いていますが、私のコメントは雇用主の立場を反映したものではありません.

于 2010-10-19T16:05:31.593 に答える
0

可能であれば、ソケットで TCP キープアライブをオンにし、かなり短いタイマー (たとえば、1 ~ 5 分ごと) を与えます。ソケットから読み取っている限り、到達不能なピアをより迅速に検出できます。また、アプリケーションのタイムアウトを 30 分短縮するよりも、電話でのリソース使用量が少なくなります。

于 2010-10-19T15:52:01.990 に答える