1

当一个人调用channel.connect一个未来时,它会被返回。然后为每个出站处理程序.connect()调用传递一个承诺。(我猜它们确实是同一个对象,但让我们忽略这一点。)到目前为止很清楚。

在某些时候,添加到 (a) 未来和 (b) 承诺的侦听器会收到有关完成的通知。此外,在某些时候 (c).channelActive()将在所有入站处理程序上调用(据我了解,这将替换 netty-3.x 中的 .connected)。isActive()最后是第一次返回 true 的时间点 (d) 。

问题:(a)到(d)之间是否有明确的顺序?

上下文:我正在尝试实现一个处理程序,该处理程序在连接时将消息写入通道。它工作得很好,但有时似乎处理程序不是第一个开始编写的。

4

1 回答 1

1

顺序是有保证的,但它可能会更早触发一个事件,然后您可以添加侦听器本身,因为一切都是异步的。如果您想确保在所有情况下都在 channelActive() 之前调用 ChannelFutureListener,您可以通过 channel.newPromise() 创建 ChannelPromise,向其添加 ChannelListener,然后将 ChannelPromise 传递给 connect 方法。

约定是ChannelPromise总是会在ChannelOutboundHandler/ChannelInboundHandler中对应方法之前得到通知

于 2013-11-06T06:18:54.810 回答