netty版本
- 使用的netty版本是
io.netty:netty-all:4.1.33.Final
Netty客户端重连
-
为什么需要重连?
- 当服务端出现异常,客户端无法与服务端连接,当服务端修复后,客户端可以主动重新连接到服务端,一般情况下自动重连用于长连接,因为短连接每次都会重新打开连接,数据完成之后会主动关闭连接,所以也就不需要重连
- 当客户端网络出现问题时,比如网络抖动,可能导致短暂时间内无法访问服务端的情况,此时客户端需要重连
-
Netty客户端有两种情况需要重连
- 启动连接失败时需要重连
- 运行过程中连接断开时需要重连
-
启动连接失败时,通过
ChannelFuture
设置监听器来判断是否连接成功。重连可以设置次数,即当次数到达最大值时,不再重新建立连接。此处代码没有设置最大重连次数public class Client { private static final Logger LOGGER = LoggerFactory.getLogger(Client.class); private Bootstrap bootstrap = new Bootstrap(); private NioEventLoopGroup workerGroup = new NioEventLoopGroup(1, new DefaultThreadFactory("netty-client")); private int port; private String host; public Client(String host, int port) { this.host = host; this.port = port; init(); } public void init() { bootstrap.group(workerGroup)// .option(ChannelOption.TCP_NODELAY, true)// .option(ChannelOption.SO_REUSEADDR, true)// .channel(NioSocketChannel.class); bootstrap.handler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast("lineBased", new LineBasedFrameDecoder(1024)) .addLast(new StringDecoder()) .addLast(new StringEncoder()) .addLast(new ClientHandler(Client.this)); } }); } public ChannelFuture connect() { ChannelFuture future = bootstrap