Netty IdleStateAwareHandler per connection not channel



我有一个服务器和一个客户端,它们有自己的引导程序。 我的问题是不同的连接用于不同的目的。 一个用于控制通道(与服务器通信并返回(,然后建立其他连接以进行数据传输。 我以编程方式将 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 个连接。

相关内容

最新更新