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