Netty简单通道处理程序断开连接被阻止

use*_*201 5 java netty

My Netty频道处理程序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);
Run Code Online (Sandbox Code Playgroud)

Ala*_*ava 2

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

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

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

希望这可以帮助 !!