3

以下のchannelIdle実装を実装しました。

public void channelIdle(ChannelHandlerContext ctx, IdleStateEvent e) 
    throws Exception {

    Response response = business.getResponse();

    final Channel channel = e.getChannel();

    ChannelFuture channelFuture
            = Channels.write(
               channel, 
               ChannelBuffers.wrappedBuffer(response.getXML().getBytes())
    );

    if (response.shouldDisconnect()) {// returns true and listener _is_ added.
        channelFuture.addListener(new ChannelFutureListener() {
            @Override
            public void operationComplete(ChannelFuture future) throws Exception {
                channel.close(); // never gets called :(
            }
        });
    }
}

非 SSL モードで実行している場合、これは期待どおりに機能します。

ただし、SSL を有効にして実行すると、operationCompleteメソッドが呼び出されることはありません。さまざまなマシンでこれを数回確認しました。アイドル タイムアウトは何度も発生しますが、operationComplete呼び出されません。例外がスローされることはありません。

コードをトレースして、どこoperationCompleteで呼び出されるかを確認しようとしましたが、複雑で、よくわかりませんでした。

future = succeededFuture(channel); inへの呼び出しがありますが、SslHandler.wrap()それが何かを意味するかどうかはわかりません。から返される未来は、コードwrapの他の場所で使用されることはありません。SslHandler

4

1 に答える 1

0

これはバグのように聞こえます..問題を示す簡単な「テスト ケース」を作成し、github イシュー トラッカー [1] でイシューを開くことは可能でしょうか。

常に発生するのか、たまにしか発生しないのかなどを必ず説明してください.

[1] https://github.com/netty/netty/issues

于 2012-09-14T05:21:09.203 に答える