Netty 4 - 使用不同的线程进行发送和接收

时间:2013-07-20 07:07:01

标签: java netty

我在我的项目中使用Netty 4。我发现它为每个通道(连接)分配一个线程,并将其用于接收和发送数据 在我的应用程序中,我从通道获取请求,在不同的线程(我自己的线程)中处理它们,然后通过相同的通道发回响应。由于使用一个线程进行入站和出站,处理接收的数据包会在线程发送数据包时等待 有没有办法为每个通道使用2个线程,一个用于接收(入站数据处理),一个用于发送(出站数据处理)?

2 个答案:

答案 0 :(得分:2)

使用不同的EventExecutorGroup,您可以将发送和接收处理程序逻辑放入不同的线程,即在一个EventExecutorGroup中发送处理程序,在另一个中写入处理程序。

但通常发送速度相当快,而且您不需要使用自己的线程。对于接收和连续冗长的处理,您可能需要使用自己的线程,方法是将逻辑放入DefaultEventExecutorGroup,该组提供所有连接通道使用的线程池,同时仅为一个此类通道提供一个线程。

以下示例代码:

final EventExecutorGroup bizEventLoopGroup = new     DefaultEventExecutorGroup(50);

public void initChannel(Channel ch) throws Exception {
        ChannelPipeline p = ch.pipeline();
//other code...

p.addLast(bizEventLoopGroup, LOGIN_HANDLER, new LoginHandler());
//LoginHandler is time-consuming since it will need to ensure sending back all previously cached message.

答案 1 :(得分:0)

我发现它只使用一个线程进行读写,并且没有改变它的方法。