2013-02-14 19 views
5

私はNetty websiteから、プロキシサーバーの例でオーバー見てきた:Nettyハンドラは接続ごとに一意ですか?

例のソースコードハンドラはvolatile変数プロキシのために別のサーバーに接続するチャネルの世話を

private volatile Channel outboundChannel; 

を持っています。

これは、これがプロキシの複数の接続に実装するための正確かつ安全な方法であるかどうか疑問に思いました。

複数の接続(インバウンド)で異なるアウトバウンドに接続し、すべてのインバウンド接続がアウトバウンドチャネルに一意にリンクされていることを確認します。

私の知識によれば、Nettyは接続ごとに新しいパイプラインを生成します。これは、パイプライン工場で新しく生成されたハンドラが、新しい接続(チャネル)に固有の専用であることを意味しますか?

p.s. Nettyサーバーへのアクティブな接続が1,000件ある場合、これは1,000の異なるパイプラインがあることを意味しますか?

答えて

8

接続ごとに1つのパイプラインが作成されますが、パイプラインには共有ハンドラと排他的ハンドラの両方が含まれることがあります。いくつかのハンドラは状態を保持せず、1つのインスタンスを複数の[すべて]パイプラインに挿入することができます。共有可能なNetty提供ハンドラには、ChannelHandler.Sharableという注釈が付けられています。このtutorial共有チャネルと排他チャネルハンドラを参照してください。

+1

右ですが、各接続(つまり各パイプライン)ごとに専用のチャネルハンドラを宣言すると、そのチャネルハンドラがその特定の接続専用であることを意味しますか? – wns349

+1

正しい。添付ファイルやChannelLocalsのすべての状態を保持することで、Sharableになるようにハンドラを再実装することができます。 – Nicholas

+0

私はリソースの収集に関する懸念があります。 使用後にハンドラリソースを解放するにはどうすればよいですか? –

関連する問題