2

背景

接続されたチャネルのサーバー側レジストリを維持したいのですが、このレジストリを、接続されたチャネルごとに一意の既知の名前/IDでKEY化する必要もあります。

したがって、接続されている各チャネルのキーとして文字列IDを使用します-(つまり、クライアントとサーバーの両方がそれを認識していますが、GUIDではありません)。

クライアントが接続し、サーバー側ハンドラーのchannelActiveメソッドが呼び出されたときに、このChannel IDをChannelHandlerContextからプルして、この(ID、Channel)ペアを格納します。

クライアントまたは何らかの障害によってチャネルが切断された場合、マップから(ID、チャネル)ペアを削除します。

質問

このアプリケーションデータをクライアント側のConnect呼び出しで渡して、サーバー側のハンドラーがchannelActiveメソッドでこれを読み取れるようにする方法はありますか?

これは「接続時」でのみ実行できますか?これは純粋にチャネルの接続/切断の識別のためであるため、このロジックを実際のメッセージ処理に追加することは避けたいと思います。

ありがとう

4

1 に答える 1

0

帯域外での議論の後、接続はエンドポイント間の物理接続を確立するためだけに使用されることがよくわかりました。パイプライン内のさまざまなハンドラーが構築/使用されるのは、チャネルへの最初の書き込みが発生するまでではありません。

その結果、これをメッセージ処理レイヤーに組み込みます。クライアント チャネルの channelActive メソッドを使用して、1 回限りの登録呼び出しを処理します。

于 2013-03-22T13:38:29.810 に答える