Netty案例(四)之重连

本文介绍了Netty在客户端和服务端的重连策略。客户端在服务端异常或网络问题时能自动重连,分为启动失败和运行中连接断开两种情况。服务端启动时如果遇到错误会进行重试,但手动停止后不再自动重启,以确保服务可控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

netty版本

  1. 使用的netty版本是io.netty:netty-all:4.1.33.Final

Netty客户端重连

  1. 为什么需要重连?

    • 当服务端出现异常,客户端无法与服务端连接,当服务端修复后,客户端可以主动重新连接到服务端,一般情况下自动重连用于长连接,因为短连接每次都会重新打开连接,数据完成之后会主动关闭连接,所以也就不需要重连
    • 当客户端网络出现问题时,比如网络抖动,可能导致短暂时间内无法访问服务端的情况,此时客户端需要重连
  2. Netty客户端有两种情况需要重连

    • 启动连接失败时需要重连
    • 运行过程中连接断开时需要重连
  3. 启动连接失败时,通过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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值