java - Netty 简单 channel 处理程序断开连接被阻止

标签 java netty

我的 Netty channel 处理程序 channelClosed ()messageReceived() 接收到另一条消息时被阻塞。
我使用 OrderedMemoryAwareThreadPoolExecutor 来同步消息。
channelClosed() 是否由低优先级线程处理?

能否介绍一下netty中的线程优先级。 谢谢

    objChannelPipeline.addLast("ipFilter", objCustomIPFilterHandler);
    objChannelPipeline.addLast("idleHandler", new IdleStateHandler(timer,5,5, 0));
    objChannelPipeline.addLast("loggingHandler", objLoggingHandler);        
    objChannelPipeline.addLast("frameDecoder",
            new DelimiterBasedFrameDecoder(Integer.MAX_VALUE, false, ChannelBuffers.copiedBuffer("\n\n".getBytes(CharsetUtil.UTF_8))));
    objChannelPipeline.addLast("messageDecoder", new CustomMessageDecoder());
    objChannelPipeline.addLast("groupOrder", executionHandler);
    objChannelPipeline.addLast("ProtocolMultiplexer", CustomHandler);

最佳答案

我猜这是因为您正在使用 OrderedMemoryAwareThreadPoolExecutor,在这种情况下,事件将按照它们发生的顺序执行。因此 messageReceived() 将始终在 channelClose() 之前执行。

因此,如果您收到了 3 条消息,之后 channel 关闭,那么前三次 messageReceived 将被执行,之后只有 channelClose() 将被执行执行。

如果您使用 MemoryAwareThreadPoolExecutor,那么在这种情况下,channelClose 可以在 messageReceived() 之前被调用,因为这里事件的执行没有顺序。

希望对您有所帮助!!

关于java - Netty 简单 channel 处理程序断开连接被阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15613129/

相关文章:

java - 异常类的默认构造函数?

java - Netty 4 OrderedMemoryAwareThreadPoolExecutor

java - 如何下载较旧的 google play 服务?

java - MySQL 检查列是否包含字符串中的单词

java - 如何在TabLayout中只显示指示器?

java - 限制 Netty 上每个 IP 的连接数

tcp - 带 Aleph 的 Clojure TCP 服务器

java - Netty 大消息无法通过。 INTEREST_CHANGED 事件抛出两次

debugging - 如何启用 netty 的内部日志记录?

java - 如何在运行时将字符串转换为整数