为什么netty只使用一个线程?

时间:2013-02-28 13:08:44

标签: java udp netty

我正在尝试编写一个udp-server。我用这种方式配置了我的引导程序:

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));

这样的Pipline:

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

2 个答案:

答案 0 :(得分:0)

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

今天我们遇到了同样的问题,对于UDP,只有一个频道有一个工作者。

因此只使用一个Thread。不确定为什么Netty不提供某些特殊工厂只有一个线程可以清楚地说明。

答案 1 :(得分:0)

你没有做错任何事。似乎Netty UDP只使用一个线程来处理请求。还报告了issue

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