0

executorservice を使用して、1 つのサーバーと 3 つのクライアント (TCP 接続) があります。

サーバー S から C1、C2、C3 にデータを送信しようとしています。合計データは 3000 行です。

3 つのクライアントがすべて稼働している場合、これら 3 つのクライアントは合計で 3000 回線を取得できます。

今私の問題は、1つのクライアントが死んでいる(接続が失われた)場合、他の2つのクライアントを取得する方法です

残りのデータは?

たとえば、C1 が 200 回線を受信したので、シャットダウンしました。C2+C3 に 2800 行を受信させる方法は?

4

1 に答える 1

0

すべての TCP セッションは独立しているため、残りの 2800 行を残りの 2 つのソケットに書き込むだけです。

を使用select(...)すると、接続がより多くのデータを受け入れることができるか、読み取るデータがあるか、または接続が閉じられた (読み取りの準備ができているが、使用可能なバイト数が 0 である) ときに通知されます。

「select」が接続が閉じたことを通知したら、ポーリングされたファイル記述子のリストからそれを削除し、他の記述子への書き込みを続けます。それぞれが異なるレートで流れる可能性があるため、書き込まれたバイト数に関する独自の状態が必要です。

于 2012-10-11T02:40:54.740 に答える