2013-03-25 7 views
5

messageReceived()で受信されている間に、My NettyチャネルハンドラchannelClosed()がブロックされます。
私はメッセージを同期するためにOrderedMemoryAwareThreadPoolExecutorを使用しました。
channelClosed()は優先度の低いスレッドで処理されますか?Netty単純なチャネルハンドラの切断がブロックされる

スレッドの優先度については、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); 

答えて

2

私はあなたが彼らが発生した順序で実行されます。この場合、イベントには、OrderedMemoryAwareThreadPoolExecutorを使用しているため、これがあると思いますありがとうございました。従ってmessageReceived()は常にchannelClose()の前に実行されます。

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

この場合、channelCloseよりもMemoryAwareThreadPoolExecutorを使用すると、messageReceived()の前に呼び出される可能性があります。イベントの実行は順序付けられていません。

これが役立ちますように!

+0

シナリオは1つのチャネルが閉じていると同時に、別のチャネルが接続され、メッセージがそのチャネルを通じて受信されます。 – user2067201

+0

@ user2067201その場合、 'channelClose()'イベントの前に、 'channelReceived'イベントを別のチャンネルで起きているように呼び出すこともできます。しかし、イベントに関連するスレッドの優先順位はありませんので、どのような順序でも発生する可能性があります。 –

+0

あなたの返信ありがとうございます。私は最初にチャンネル閉鎖イベントを持っていますが、いつmessageReceived()m – user2067201

関連する問題