我的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/