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

10-10 13:39