1

私のJavaアプリケーションは、メッセージ(マルチスレッド)をソケットサーバーに送信する必要があります。アプリケーションは、1秒間に約100〜200のメッセージを送信できます。

これを行うためのより良いアプローチはどれか知りたいですか?

  1. 単一のクライアントソケットを開き、この1つのソケットを介してすべてのスレッドからメッセージを送信します。 短所:接続障害時に再接続ロジックを処理する必要があり、再接続の進行中に多くのメッセージが失われる可能性があります。スレッドセーフ、ブロッキング??
  2. スレッドごとに新しいクライアントソケット接続を作成し、送信後に閉じます。 短所:ソケットを閉じても、ポートはTIME_WAIT期間まで待機します。

どちらがより実用的なアプローチですか?

4

2 に答える 2

3

私は3を提案します。:スレッドごとにソケットを開き、スレッドを再利用します(たとえば、スレッドプールを介して)。次に、スレッド内で再接続を処理するか、適切に破棄して新しいスレッドを作成します。このようにして、ブロッキングと同期の問題を回避できます

于 2011-11-10T10:41:54.417 に答える
1

1秒あたり100〜200メッセージはそれほど多くありません。これは高価なので、毎回再接続することはありません。接続を再利用すると、はるかに高速になります。

メッセージが失われることが心配な場合は、メッセージのバッチまたは一度に1つずつ送信して、受信したサーバーからの確認を待つことができます。この方法でも、1秒あたり数千のメッセージを送信できます。

于 2011-11-10T11:19:33.210 に答える