每个连接的Netty IdleStateAwareHandler不是通道

时间:2017-06-08 14:40:36

标签: netty

我有一个服务器和一个拥有自己的引导程序的客户端。我的问题是不同的连接用于不同的目的。一个用于控制通道(与服务器通信并返回),然后建立其他连接以进行数据传输。我以编程方式将idlestate处理程序仅添加到需要它的连接管道中,但是在调试之后我发现无论连接如何,通道始终是相同的。所以我的数据传输正在影响保持活力。通过向netty IdleStateHandler添加调试并输出通道ID,我能够看到这一点。很可能是我的误解,但我认为每个连接都是它自己的渠道。

如何将空闲状态处理程序添加到特定连接?

2 个答案:

答案 0 :(得分:0)

Channel是Netty中连接的抽象。因此,每次使用IdleStateHandler初始化管道时,如下所示:

 public class MyChannelInitializer extends {ChannelInitializer, Channel} {
     @Override
     public void initChannel(Channel channel) {
         channel.pipeline().addLast("idleStateHandler", new  IdleStateHandler(60, 30, 0));
         channel.pipeline().addLast("myHandler", new MyHandler());
     }
 }

您为每个新连接/频道分配新的IdleStateHandler。没有代码,很难给出更准确的答案。

最有可能的是,您要么在频道之间使用相同的IdleStateHandler实例,要么客户端只打开1个连接而不是2个连接。

答案 1 :(得分:0)

发现idlestatehandler的位置是我的问题。它是在sslhandler之后添加的,它导致无效状态发生。在ssl处理程序之前移动它并且它正常工作。