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 に答える