1

Java で独自のプロトを実装しています。これは、メッセージとファイルの転送にも使用する TCP 接続を介してハートビートを使用します。クライアントには、ブロッキング ソケット I/O を使用しています。それで、これがどのように機能するかを計画しています...ソケットタイムアウトをK秒に設定し、ハートビートが間隔Tでメッセージを送信し続けるようにして、T <Kになります。タイムアウトが期限切れになると、サーバーがオフラインのように見えますクライアントのために、またはその逆。

ハートビートは、サーバーが文字列を送信し、クライアントが別の文字列に応答することです。

多くの帯域幅を無駄にしたくありませんが、タイムアウトが大きいと、サーバーがクライアントのステータスについて誤解する可能性があります。

適切な K 間隔とは? 40秒くらい考えてる

PS: 文字列は ISO-8859-1 で送信された 8 文字であるため、その小さなデータ

4

2 に答える 2

3

"K" は、アプリケーションの特定のトラフィック プロファイル (例: アプリケーション データが転送される頻度) とアプリケーションの接続損失に対する耐性 (例: 受信者が接続の損失をどれだけ迅速に検出する必要があるか) に大きく依存します。残念ながら、低いオーバーヘッドと迅速な検出は相反する目標です。

TCP ハーフオープン接続の問題 (RFC 793 の意味)に対処しようとしているようです。その場合、「ハーフオープン」という用語を知らなかった場合は、TCP の「ハーフオープン」を調べると、次のような役立つ情報が得られる可能性があります。

http://www.codeproject.com/Articles/37490/Detection-of-Half-Open-Dropped-TCP-IP-Socket-Conne.aspx

于 2010-09-23T18:06:41.237 に答える
1

ここに一般的な「正しい」答えはないと思います。それは本当にあなたのニーズに依存します。帯域幅の要件と、クライアントがまだ存在しているとサービスに考えさせるコストのバランスをとる必要があります。これらのニーズは、アプリケーションによって異なります。IMの場合は、おそらく数秒以内に知りたいと思うでしょうが、ファイル転送アプリの場合は、数分で十分かもしれません。

于 2010-09-23T17:57:42.023 に答える