0

我正在阅读 Netty 4.0.10.Final 的源代码。在 AbstractChannel.AbstractUnsafe 类中

    private void invokeLater(Runnable task) {
        // This method is used by outbound operation implementations to trigger an inbound event later.
        // They do not trigger an inbound event immediately because an outbound operation might have been
        // triggered by another inbound event handler method.  If fired immediately, the call stack
        // will look like this for example:
        //
        //   handlerA.inboundBufferUpdated() - (1) an inbound handler method closes a connection.
        //   -> handlerA.ctx.close()
        //      -> channel.unsafe.close()
        //         -> handlerA.channelInactive() - (2) another inbound handler method called while in (1) yet
        //
        // which means the execution of two inbound handler methods of the same handler overlap undesirably.
        eventLoop().execute(task);
    }

有评论让我很困惑。为什么出站事件会立即触发入站事件。有人可以为我解释细节吗?谢谢!

4

1 回答 1

0

(我已经回答了这个问题,但我再次回答以完成此条目。)

评论说的基本上是我们要确保在同一个处理程序中处理程序方法的执行不会重叠。没有invokeLater(),将在返回handlerA.channelInactive()之前被调用。handlerA.inboundBufferUpdated()

于 2013-11-02T09:35:49.277 回答