5

我的 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);
4

1 回答 1

2

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

因此,如果您收到 3 条消息,然后通道关闭,则将messageReceived执行前 3 次,之后仅channelClose()执行。

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

希望这可以帮助 !!

于 2013-03-25T11:15:06.657 回答