Java Netty简单通道处理程序断开连接被阻止
我的Netty通道处理程序Java Netty简单通道处理程序断开连接被阻止,java,netty,Java,Netty,我的Netty通道处理程序channelClosed()在messageReceived()接收另一条消息时被阻止 我使用了OrderedMemoryAwareThreadPoolExecutor来同步消息。 是否由低优先级线程处理channelClosed() 你能告诉我netty的线程优先级吗。 多谢各位 objChannelPipeline.addLast("ipFilter", objCustomIPFilterHandler); objChannelPipeline.a
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
位于第二个频道,而不是关闭的频道。