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

时间:2013-03-25 10:52:22

标签: 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);

1 个答案:

答案 0 :(得分:2)

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

因此,如果您收到3封邮件,之后该频道已关闭,则前三次messageReceived将被执行,之后只会执行channelClose()

如果使用MemoryAwareThreadPoolExecutor,则channelClose可以在messageReceived()之前调用{{1}},因为此处不会对事件的执行进行排序。

希望这会有所帮助!!