2017-08-14 1 views
1

将来リスナーチャネルできるコードの上記部分において網状:チャネルを初期化は、私が代わりに使用するIdleStateHandlerの静的オブジェクトを使用することができる場合、私はパイプラインで静的アイドル状態ハンドラを与え、チャンネル初期化剤で

protected void initChannel(SocketChannel ch) throws Exception { 
     MessageHandler handler = new MessageHandler(channelGroup); 
     ch.pipeline().addLast(DECODER, new MessageDecoder()) 
       .addLast(ENCODER, newMessageEncoder()) 
       .addLast(idleExecutor, "idleHandler", new IdleStateHandler(0, 0, 6*60)) 
       .addLast(pipelineExecutor, "handler", handler); 
    } 

すべてのチャンネルの新しいインスタンス。スレッドセーフですか?また

、私はチャンネルに何かを書く

。 私はそれにアイドルリードハンドラを追加しています。しばらく待ってから応答がなければ、私はチャンネルを閉じます。

 ChannelPipeline pipeline = channel.pipeline(); 
     pipeline.addAfter(ChannelInitializer.idleExecutor, 
"idleHandler", "idleReadHandler",new IdleStateHandler(60, 0, 0)); 

上記のコードでstatic idleReadHandlerを使用できますか?私が使用しています

ネッティー-4.1.0それはネッティー3.xの https://docs.jboss.org/netty/3.2/api/org/jboss/netty/handler/timeout/IdleStateHandler.html までのJBossドキュメントで共有可能なマークされていた。しかしネッティーで

答えて

1

、ルール4.xのドキュメントに表示されていない

ハンドラが複数チャネル間でスレッドセーフで使用できるかどうかを判断するのは@Shareable注釈です。 IdleStateHandlerには注釈が付いていないため、安全に使用できないことを意味します。

+0

4.xのドキュメント https://docs.jboss.org/net/3.2/api/org/jboss/netty/handler/timeout/IdleStateHandler.htmlにはありませんでした。だからそれは慎重であるか、偶然に逃したのだろうか? – Peter

+1

それは共有することはできませんので、あなたはFerrybigが言ったように新しいインスタンスを作成する必要があります。 –

関連する問題