JBoss Netty和UDP:多线程?

时间:2012-06-20 10:59:52

标签: java multithreading udp netty

我使用Netty编写了一个简单的UDP服务器。服务器侦听某个接口上的一个端口。

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配置我的应用程序时,我发现只有一个线程(名为New I / O worker#1)处理传入的消息。这是预期的吗?

如果是,单个线程如何处理大量传入消息?我已经编写了一个Spring集成的应用程序,它监听UDP数据报的端口(使用UDP入站通道适配器),并且有一个线程侦听端口,但是这个线程将传入的消息传递给其他线程一个游泳池。

由于

2 个答案:

答案 0 :(得分:1)

我建议你在java.nio中使用Reactor模式 - 看看this -

答案 1 :(得分:1)

您的计算机上有多少个核心?

如果您的处理程序管道没有进行任何阻塞或任何冗长的处理,那么I / O处理很可能总是比网络快很多,即IO线程将处于空闲状态并等待工作它的大部分时间。无需从池中分配另一个线程。

另一方面,如果您的处理程序涉及冗长的处理或阻止调用,例如数据库或文件访问,然后您应该将处理交给ExecutionHandler,即将处理从IO工作池传输到另一个线程池。