一起学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

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

基于Redis自动过期的流处理暂停机制

《基于Redis自动过期的流处理暂停机制》基于Redis自动过期的流处理暂停机制是一种高效、可靠且易于实现的解决方案,防止延时过大的数据影响实时处理自动恢复处理,以避免积压的数据影响实时性,下面就来详... 目录核心思路代码实现1. 初始化Redis连接和键前缀2. 接收数据时检查暂停状态3. 检测到延时过

Redis中哨兵机制和集群的区别及说明

《Redis中哨兵机制和集群的区别及说明》Redis哨兵通过主从复制实现高可用,适用于中小规模数据;集群采用分布式分片,支持动态扩展,适合大规模数据,哨兵管理简单但扩展性弱,集群性能更强但架构复杂,根... 目录一、架构设计与节点角色1. 哨兵机制(Sentinel)2. 集群(Cluster)二、数据分片

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Redis客户端连接机制的实现方案

《Redis客户端连接机制的实现方案》本文主要介绍了Redis客户端连接机制的实现方案,包括事件驱动模型、非阻塞I/O处理、连接池应用及配置优化,具有一定的参考价值,感兴趣的可以了解一下... 目录1. Redis连接模型概述2. 连接建立过程详解2.1 连php接初始化流程2.2 关键配置参数3. 最大连

Spring Security 单点登录与自动登录机制的实现原理

《SpringSecurity单点登录与自动登录机制的实现原理》本文探讨SpringSecurity实现单点登录(SSO)与自动登录机制,涵盖JWT跨系统认证、RememberMe持久化Token... 目录一、核心概念解析1.1 单点登录(SSO)1.2 自动登录(Remember Me)二、代码分析三、