一起学Netty(十三)之 Netty简单的重连机制

2024-05-07 09:32

本文主要是介绍一起学Netty(十三)之 Netty简单的重连机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

其实重连机制并不是多么多高深的技术,其实就是一个在客户端做一个简单的判断,如果连接断了,那么就重新调用连接服务端的代码


当然,我们重连的动作肯定是发生在断连之后发生的,我们可以在上篇的心跳机制的基础上,简单地修改一下客户端的启动代码就可以了:


我们在连接断了之后,我们一般会在finally的方法中去释放资源,这边我们应该不去释放资源,我们在finally里面进行重连:


整个客户端的代码如下:

[java]  view plain copy
  1. package com.lyncc.netty.heartbeats;  
  2.   
  3. import java.util.concurrent.TimeUnit;  
  4.   
  5. import io.netty.bootstrap.Bootstrap;  
  6. import io.netty.channel.ChannelFuture;  
  7. import io.netty.channel.ChannelInitializer;  
  8. import io.netty.channel.ChannelOption;  
  9. import io.netty.channel.ChannelPipeline;  
  10. import io.netty.channel.EventLoopGroup;  
  11. import io.netty.channel.nio.NioEventLoopGroup;  
  12. import io.netty.channel.socket.SocketChannel;  
  13. import io.netty.channel.socket.nio.NioSocketChannel;  
  14. import io.netty.handler.codec.string.StringDecoder;  
  15. import io.netty.handler.codec.string.StringEncoder;  
  16. import io.netty.handler.logging.LogLevel;  
  17. import io.netty.handler.logging.LoggingHandler;  
  18. import io.netty.handler.timeout.IdleStateHandler;  
  19.   
  20. public class HeartBeatsClient {  
  21.   
  22.     public void connect(int port, String host) throws Exception {  
  23.      // Configure the client.  
  24.         EventLoopGroup group = new NioEventLoopGroup();  
  25.         ChannelFuture future = null;  
  26.         try {  
  27.             Bootstrap b = new Bootstrap();  
  28.             b.group(group)  
  29.              .channel(NioSocketChannel.class)  
  30.              .option(ChannelOption.TCP_NODELAY, true)  
  31.              .handler(new LoggingHandler(LogLevel.INFO))  
  32.              .handler(new ChannelInitializer<SocketChannel>() {  
  33.                  @Override  
  34.                  public void initChannel(SocketChannel ch) throws Exception {  
  35.                      ChannelPipeline p = ch.pipeline();  
  36.                      p.addLast("ping"new IdleStateHandler(040, TimeUnit.SECONDS));  
  37.                      p.addLast("decoder"new StringDecoder());  
  38.                      p.addLast("encoder"new StringEncoder());  
  39.                      p.addLast(new HeartBeatClientHandler());  
  40.                  }  
  41.              });  
  42.   
  43.             future = b.connect(host, port).sync();  
  44.             future.channel().closeFuture().sync();  
  45.         } finally {  
  46. //          group.shutdownGracefully();  
  47.           if (null != future) {  
  48.               if (future.channel() != null && future.channel().isOpen()) {  
  49.                   future.channel().close();  
  50.               }  
  51.           }  
  52.           System.out.println("准备重连");  
  53.           connect(port, host);  
  54.           System.out.println("重连成功");  
  55.         }  
  56.     }  
  57.   
  58.     /** 
  59.      * @param args 
  60.      * @throws Exception 
  61.      */  
  62.     public static void main(String[] args) throws Exception {  
  63.         int port = 8080;  
  64.         if (args != null && args.length > 0) {  
  65.             try {  
  66.                 port = Integer.valueOf(args[0]);  
  67.             } catch (NumberFormatException e) {  
  68.                 // 采用默认值  
  69.             }  
  70.         }  
  71.         new HeartBeatsClient().connect(port, "127.0.0.1");  
  72.     }  
  73.   
  74. }  
我们再看看服务器端和客户端启动之后的控制台打印信息:


服务器控制台:

客户端:


好了,这样就可以重连~这只是一个简单的Demo,真实的生产场景用法可能并不是这样的

这篇关于一起学Netty(十三)之 Netty简单的重连机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/966969

相关文章

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

MySQL中的锁机制详解之全局锁,表级锁,行级锁

《MySQL中的锁机制详解之全局锁,表级锁,行级锁》MySQL锁机制通过全局、表级、行级锁控制并发,保障数据一致性与隔离性,全局锁适用于全库备份,表级锁适合读多写少场景,行级锁(InnoDB)实现高并... 目录一、锁机制基础:从并发问题到锁分类1.1 并发访问的三大问题1.2 锁的核心作用1.3 锁粒度分

Redis的持久化之RDB和AOF机制详解

《Redis的持久化之RDB和AOF机制详解》:本文主要介绍Redis的持久化之RDB和AOF机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述RDB(Redis Database)核心原理触发方式手动触发自动触发AOF(Append-Only File)核

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示