1

Nettyを使用して単純なUDPサーバーを作成しました。サーバーは、特定のインターフェイスの1つのポートでリッスンします。

ChannelFactory factory =
            new NioDatagramChannelFactory(
                    Executors.newCachedThreadPool());

ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(factory);

bootstrap.getPipeline().addLast("MyHandler", new TestHandler());

bootstrap.bind(new InetSocketAddress(InetAddress.getByName("192.168.1.100"), 8080));

大量のUDPデータグラムをサーバーに送信するクライアントを使用しています。VisualVMを使用してアプリのプロファイルを作成すると、着信メッセージを処理するスレッドが1つ(New I / Oワーカー#1という名前)しかないことがわかります。期待通りですか?

はいの場合、単一のスレッドで大量の着信メッセージを処理するにはどうすればよいですか?(UDPインバウンドチャネルアダプターを使用して)UDPデータグラムをポートでリッスンするSpring統合を使用したアプリケーションを既に作成しました。ポートでリッスンするスレッドが1つありますが、このスレッドは受信メッセージを他のスレッドに処理するために渡します。プール。

ありがとう

4

2 に答える 2

1

java.nioでReactorパターンを使用することをお勧めします-これを見てください-

于 2012-06-20T11:25:30.463 に答える
1

マシンにはコアがいくつありますか?

ハンドラーパイプラインがブロッキングや長時間の処理を行わない場合、I / O処理は常にネットワークよりもはるかに高速である可能性があります。つまり、IOスレッドはアイドル状態になり、作業をかなりの割合で待機します。その時の。プールから別のスレッドを割り当てる必要はありません。

一方、ハンドラーがデータベースやファイルアクセスなどの長時間の処理またはブロック呼び出しを伴う場合は、IOワーカープールから別のスレッドプールに処理を転送するExecutionHandlerに処理を渡す必要があります。

于 2012-06-20T14:08:29.103 に答える