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()、常に前に実行されchannelClose()ます。

したがって、3 つのメッセージを受信し、その後チャネルが閉じられた場合、最初の 3 回messageReceivedが実行され、その後のみchannelClose()が実行されます。

MemoryAwareThreadPoolExecutorこの場合よりも使用すると、イベントの実行が順序付けられていないため、channelClose前に呼び出すことができます。messageReceived()

お役に立てれば !!

于 2013-03-25T11:15:06.657 に答える