2017-06-08 10 views
0

自分自身のブートストラップを持つサーバーとクライアントがあります。私の問題は、さまざまな目的で異なる接続が使用されていることです。 1つは制御チャネル(サーバーと通信)に使用され、データ転送を行うために他の接続が確立されます。私はプログラムによってidlestateハンドラを接続パイプラインにのみ追加しますが、デバッグ後には接続に関係なくチャンネルは常に同じです。だから私のデータ転送は、キープに影響を与えている。私はnetty IdleStateHandlerにデバッグを追加し、チャネルIDを出力することでこれを見ることができました。私の誤解の可能性が高いですが、私はそれぞれの接続が独自のチャンネルだと思っていました。Netty IdleStateAwareHandler接続ごとにチャネルなし

アイドル状態のハンドラを特定の接続に追加する方法はありますか?

答えて

0

チャンネルはNettyの接続よりも抽象です。だから、毎回あなたは、このように、その中にIdleStateHandlerでパイプラインを初期化する:あなたは、新しい接続/チャネルごとに新しいIdleStateHandlerを割り当てる

public class MyChannelInitializer extends {ChannelInitializer, Channel} { 
    @Override 
    public void initChannel(Channel channel) { 
     channel.pipeline().addLast("idleStateHandler", new IdleStateHandler(60, 30, 0)); 
     channel.pipeline().addLast("myHandler", new MyHandler()); 
    } 
} 

。コードなしでは、より正確な答えを出すのは難しいです。

おそらく、あなたのいずれかのチャンネルやクライアント間IdleStateHandlerの同じインスタンスを使用するには、idlestatehandlerの場所は私の問題だったことが判明代わりに2

0

の唯一の1の接続を開きます。無効な状態が発生したsslhandlerの後に追加されました。 sslハンドラの前に移動し、適切に動作します。

関連する問題