1

TCPクライアントとサーバーアプリを書いています。サーバーはリクエストを受け取り、クライアントごとに別のスレッドでソケットを開きます。クライアントはイベントに登録する可能性があり、サーバーはイベントが発生したらクライアントにイベントを送信する必要があります。私の質問は、ソケットを保存して、リクエストの同じ開いているソケットでイベントを送信することをお勧めします。つまり、メッセージが送信されない場合、しばらくするとソケットが閉じますか?キープアライブの必要性はありますか?クライアント側がまだ接続されている間に切断を引き起こす他のシナリオはありますか?各イベント(サーバーによって送信される各メッセージ)に対して新しいソケットを作成するオーバーヘッドはどれくらいですか?

4

1 に答える 1

0

アライブ接続を確立でき、TCP接続のためにサーバーとクライアント間でアライブパケットを使用する必要はありません。接続が切断されると、両側が切断されます。

正しく理解できれば、パケット受信機能で接続が切断されていないか簡単に確認できます。切断された場合に再接続する機能をインポートするだけです。

ただし、サーバーが新しい「イベント」を公開する前に接続が切断され、その後再接続された場合、クライアントはこのパケットを受信できません。

この問題を見逃した場合は、次のことを試してください。

  1. イベントをリストに保存します。
  2. すべてのイベントにタイムスタンププロパティを追加します。
  3. クライアントが最後に受信したイベントのタイムスタンプ値を記憶できることを確認してください。
  4. 再接続後に欠落しているイベントの最後のイベントのタイムスタンプ値を含む要求をクライアントに送信させます。
  5. サーバーがこの要求を受信した場合は、要求パケットのLastTimeStamp引数よりも大きいタイムスタンプのイベントを送信するようにします。
于 2013-03-10T10:37:30.807 に答える