1

未来を呼び出すとchannel.connect、返されます。次に、それぞれの outbound-handler.connect()が呼び出され、promise を渡します。(実際には同じオブジェクトだと思いますが、それは無視しましょう。) ここまでは明らかです。

ある時点で、(a) future、(b) promise に追加されたリスナーは、完了について通知されます。また、ある時点で (c).channelActive()がすべての受信ハンドラーで呼び出されます (私が理解している限り、これは netty-3.x の .connected を置き換えます)。isActive()そして最後に、初めて true を返す時点 (d) があります。

質問: (a) から (d) の間に定義された順序はありますか?

コンテキスト:接続時にチャネルにメッセージを書き込むハンドラーを実装しようとしています。ほとんどの場合はうまく機能しますが、handler が最初に書き込めないように見えることがあります。

4

1 に答える 1

1

順序は保証されますが、すべてが非同期であるため、リスナー自体を追加できるようになる前にイベントがトリガーされる可能性があります。どのような場合でも ChannelFutureListener が channelActive() の前に呼び出されるようにしたい場合は、channel.newPromise() を介して ChannelPromise を作成し、ChannelListener をそれに追加してから、ChannelPromise を connect メソッドに渡すことができます。

契約は、 ChannelPromise が常に ChannelOutboundHandler/ChannelInboundHandler の対応するメソッドの前に通知されることです

于 2013-11-06T06:18:54.810 に答える