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 总是只由一个线程管理。我究竟做错了什么?

4

2 回答 2

0

你没有做错任何事。似乎 Netty UDP 只使用一个线程来处理请求。也有关于此的问题报告。

您最好在收到请求后创建一个 ExecutorService 来执行您的业务逻辑。

于 2014-04-08T04:53:38.577 回答
0

请检查这个http://lists.jboss.org/pipermail/netty-users/2009-September/001350.html

今天我们遇到了同样的问题,对于UDP,只有一个通道有一个worker。

所以只使用了一个线程。不知道为什么Netty不提供一些特殊的工厂只有一个线程来说明问题。

于 2013-11-21T07:28:44.253 回答