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