我们已实施以下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);
中有一个SslHandler.wrap()
来电,但我不知道这是否意味着什么。从wrap
返回的未来从未在SslHandler
代码的其他地方使用过。
答案 0 :(得分:0)
这听起来像个错误..是否可以编写一个简单的“测试用例”来显示问题,并在我们的github问题跟踪器中打开一个问题[1]。
请务必解释它是否一直发生或仅在有时发生等等。