我想实现断开连接/重新连接机制。
我已经看到大多数时候重新连接会创建一个新的Bootstrap,我想知道是否可以在ChannelHandler中进行重新连接。
例如,如果客户端捕获到WRITE_IDLE事件,它是否可以关闭通道并像下面这样在ChannelHandler中重新连接它?
@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
if (evt instanceof IdleStateEvent) {
IdleState state= ((IdleStateEvent) evt).state();
if (state == IdleState.WRITER_IDLE) {
// read timeout, break the channel
System.out.println("client write timeout");
SocketAddress remoteAddress = ctx.channel().remoteAddress();
// close channel
ctx.channel().close();
// reconnect
ctx.connect(remoteAddress);
}
}
}
我测试了几次,但是没有用。
答案 0 :(得分:1)
Channel和ChannelHandlerContext无法重新连接。一旦关闭,其“生命周期”就结束了。您将需要重新引导。