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