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

相关文章

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringRetry重试机制之@Retryable注解与重试策略详解

《SpringRetry重试机制之@Retryable注解与重试策略详解》本文将详细介绍SpringRetry的重试机制,特别是@Retryable注解的使用及各种重试策略的配置,帮助开发者构建更加健... 目录引言一、SpringRetry基础知识二、启用SpringRetry三、@Retryable注解

SpringKafka错误处理(重试机制与死信队列)

《SpringKafka错误处理(重试机制与死信队列)》SpringKafka提供了全面的错误处理机制,通过灵活的重试策略和死信队列处理,下面就来介绍一下,具有一定的参考价值,感兴趣的可以了解一下... 目录引言一、Spring Kafka错误处理基础二、配置重试机制三、死信队列实现四、特定异常的处理策略五

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

如何使用Python实现一个简单的window任务管理器

《如何使用Python实现一个简单的window任务管理器》这篇文章主要为大家详细介绍了如何使用Python实现一个简单的window任务管理器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 任务管理器效果图完整代码import tkinter as tkfrom tkinter i

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程