3

apache minaベースのGPRSゲートウェイ(サーバー)があります。通常、接続がクライアント側から残酷に終了した場合、つまり、電源ケーブルが外れたり、その他の異常なシャットダウンやネットワークの問題が発生したりした場合、サーバー側で接続が削除または閉じられないことがあります。それはアイドル状態でそこにとどまります、なぜなら私はどれくらいの期間かわからないからです(永遠かもしれません)。サーバーのシャットダウン中に問題が発生することがあります。MINAには時間がかかりすぎ、最終的にはサーバーを強制終了する必要があります。この問題は接続切れの問題に関連していると思われます。
実際、このデッドコネクションは理にかなっています。接続が残酷に閉じられ、minaにはそれをチェックする方法がないため(これがtcpセッションの動作方法です)。回避策として、セッションがアイドル状態(読み取りと書き込みの両方)のままである場合、たとえば30分(または構成可能な時間)セッションを閉じるソリューションを考案しました。2つの理由で私たちは好きではありません:
1-それは見栄えが良くありません。
2-さらに、クライアントがサーバーとの永続的な接続を確立するというルールがあります。したがって、「アイドルタイムアウト」を設定するのは少し難しいです。これは、有効な接続である可能性があるため、x分/時間アイドル状態になっているセッションを閉じることができないためです。

では、MINAでこれらの切断された接続を検出してクリーンアップするための、より優れた、より安全な(この場合)方法はありますか?

4

1 に答える 1

1

どちらの場合も、接続がアクティブでなく、接続が失われます。チャネルにアクティビティがない場合、OSIモデルのすべてのレイヤーで構成された時間が経過するとタイムアウトになります。たとえば、ファイアウォール/ルーター/サーバーが非アクティブな接続エントリを10分でタイムアウトする可能性がある場合、アプリケーション層接続も10分後にタイムアウトする必要があります。これ以上待つことは意味がありません。

サイレント接続がタイムアウトしないようにするには、keep-aliveプロトコルを導入する必要があります。ping(正確にはICMPではない)または他の形式の定期的な無操作通信である可能性があります。ピアが稼働している場合、ピアは応答し、すべてのネットワーク層でタイムアウトカウントダウンを更新する必要があります。タイムアウトまたはレイヤーシグナリングによる接続の切断が原因で試行が失敗した後、アプリケーションレイヤー接続も切断されたと見なすことができます。

于 2011-09-22T07:21:23.227 に答える