Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Netty简单通道处理程序断开连接被阻止_Java_Netty - Fatal编程技术网

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

Java Netty简单通道处理程序断开连接被阻止,java,netty,Java,Netty,我的Netty通道处理程序channelClosed()在messageReceived()接收另一条消息时被阻止 我使用了OrderedMemoryAwareThreadPoolExecutor来同步消息。 是否由低优先级线程处理channelClosed() 你能告诉我netty的线程优先级吗。 多谢各位 objChannelPipeline.addLast("ipFilter", objCustomIPFilterHandler); objChannelPipeline.a

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

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

因此,如果您已收到3条message received,并且在此之后频道关闭,则将执行前三次
messageReceived
,然后仅执行
channelClose()

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


希望这有帮助

场景是一个通道关闭,同时连接另一个通道,并通过该通道接收消息。@user2067201。在这种情况下,也可以在
channelClose()
事件之前调用
messageReceived
,因为它们发生在不同的频道上。但是没有与事件关联的线程优先级,因此它们可以以任何顺序发生。感谢您的回复。我首先收到了通道关闭事件,但当messageReceived()时,我感谢您的回复。我首先获得了channel closed事件,但是当发生
messageReceived()
事件时,在
channelClose()
中写入的代码被阻止,并执行在
messageReceived()
中写入的代码。只有在完成在
messageReceived()
@user2067201上编写的代码后,才会执行被阻止的代码。现在我需要查看代码,没有代码,我只能做猜测工作。我的一个问题是,您如何确定
channelClosed
被阻止,直到执行
messageReceived
,并且该
messageReceived
位于第二个频道,而不是关闭的频道。