1

udp サーバーを作成しようとしています。ブートストラップを次のように構成しました。

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

    ConnectionlessBootstrap bootstrap = new ConnectionlessBootstrap(factory);
    bootstrap.setPipelineFactory(new UDPServerPipelineFactory());
    bootstrap.setOption("sendBufferSize", 1048576*2);
    bootstrap.setOption("receiveBufferSize", 1048576*2);
    bootstrap.setOption("tcpNoDelay", true);
    bootstrap.setOption("receiveBufferSizePredictorFactory", new AdaptiveReceiveBufferSizePredictorFactory(1048576, 1048576, 2000000));
    bootstrap.bind(new InetSocketAddress(11000));

このようにパイプライン:

@Override
public ChannelPipeline getPipeline() throws Exception
{
    ChannelPipeline pipeline = Channels.pipeline();

    pipeline.addFirst("execution-handler", new ExecutionHandler(new OrderedMemoryAwareThreadPoolExecutor(16, 2333444, 3444333)));
    pipeline.addLast("decoder", new StringDecoder());
    pipeline.addLast("counter", new UDPHandler());

    return pipeline;
}

しかし、私の UDPHandler は常に 1 つのスレッドによってのみ管理されていました。私は何を間違っていますか?

4

2 に答える 2

0

あなたは何も悪いことをしていません。Netty UDP は単一のスレッドのみを使用してリクエストを処理しているようです。これについても問題が報告されています。

ExecutorService を作成して、リクエストを受け取った後にビジネス ロジックを実行することをお勧めします。

于 2014-04-08T04:53:38.577 に答える
0

Plsはこれをチェックしてください http://lists.jboss.org/pipermail/netty-users/2009-September/001350.html

今日、同じ問題が発生しました。UDP の場合、ワーカーを持つチャネルは 1 つしかありません。

したがって、使用されるスレッドは 1 つだけです。Netty がいくつかの特別な工場を提供しない理由はわかりませんが、物事を明確にするためのスレッドは 1 つしかありません。

于 2013-11-21T07:28:44.253 に答える