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