複数のホストに接続するために単一のclientsocketbootstrapを使用できますか?また、各接続は独自のパイプラインを取得するので、1つの接続で特定のハンドラセットと別のハンドラセットを持つことができます。1つのnettyブートストラップを複数のホストに接続できます
bootstrap.connect(serverA、portA);
次に、後で、サーバAが接続された後、
bootstrap.connect(サーバB、PORTB)。
複数のホストに接続するために単一のclientsocketbootstrapを使用できますか?また、各接続は独自のパイプラインを取得するので、1つの接続で特定のハンドラセットと別のハンドラセットを持つことができます。1つのnettyブートストラップを複数のホストに接続できます
bootstrap.connect(serverA、portA);
次に、後で、サーバAが接続された後、
bootstrap.connect(サーバB、PORTB)。
はい、クライアントブートストラップを問題なく再利用できます。 ChannelPipelineFactoryを指定すると、新しいチャンネルごとに独自のChannelPipelineが取得されます。クライアントごとに異なる設定をしたい場合は、接続ごとに1つのクライアントブートストラップを作成するだけです。ブートストラップが本当に軽量なので、これは非常にうまくいきます。
このanswerをご覧ください。これは、複数の接続を作成し、異なるハンドラーで同じクライアントブートストラップを使用するコードを示しています。
ヒントをありがとう。クライアントのソケットにワーカースレッドを共有させることができました。理想的には、一度接続されたサーバーソケットを含めて、すべてのソケットを単一のセレクターで処理したいと思います。異なるポートにバインドされている各サーバーソケットには異なるワーカースレッドセットが必要で、クライアントソケットはサーバーソケットとワーカーを共有できないようです。あれは正しいですか? –
私は独自のソケットチャネルファクトリを作成し、ワーカーファクトリインタフェースを提供しました。ワーキング・ファクトリは、ワーカーの共有プールを作成します(私の場合は1)。 NioServerSocketPipelineSinkとNioClientSocketPipelineSinkをコンストラクタで自動的に作成することはできませんでしたが、クラスコードをコピーしてコンストラクタ内のワーカー作成を、作成済みのワーカーを共有するワーカーファクトリに置き換えることができました。この方法では、複数のサーバーとクライアントのチャネルに対して1つのワーカーを配置することができます。 –
良い解決策のように見えます。私はまた、異なるポート上で動作するサーバーを持っています。これは実行可能なソリューションのようです。コードをいくつかのgithub要旨として共有できますか? – Abe