前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Netty断线重连

Netty断线重连

作者头像
JadePeng
发布于 2018-03-12 08:36:54
发布于 2018-03-12 08:36:54
1.9K00
代码可运行
举报
运行总次数:0
代码可运行

Netty断线重连

最近使用Netty开发一个中转服务,需要一直保持与Server端的连接,网络中断后需要可以自动重连,查询官网资料,实现方案很简单,核心思想是在channelUnregistered钩子函数里执行重连。

创建连接

需要把configureBootstrap重构为一个函数,方便后续复用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 EventLoopGroup group = new NioEventLoopGroup(); 
    private volatile Bootstrap bootstrap; 
 
    public void init(String host, int port) throws RobotException { 
        this.serverIp  = host; 
        this.serverPort = port; 
        try { 
            // 创建并初始化 Netty 客户端 Bootstrap 对象 
            bootstrap = configureBootstrap(new Bootstrap(),group); 
            bootstrap.option(ChannelOption.TCP_NODELAY, true); 
            doConnect(bootstrap); 
        } 
        catch(Exception ex){ 
            ex.printStackTrace(); 
            throw new RobotException("connect remote control server error!",ex.getCause()); 
        } 
    } 
 
    Bootstrap configureBootstrap(Bootstrap b, EventLoopGroup g) { 
        b.group(g).channel(NioSocketChannel.class) 
                .remoteAddress(serverIp, serverPort) 
                .handler(new ChannelInitializer<SocketChannel>() { 
                    @Override 
                    public void initChannel(SocketChannel channel) throws Exception { 
                        ChannelPipeline pipeline = channel.pipeline(); 
                        // 编解码器 
                        pipeline.addLast(protoCodec); 
                        // 请求处理 
                        pipeline.addLast(RobotClient.this); 
                    } 
                }); 
 
        return b; 
    } 
 
    void doConnect(Bootstrap b) { 
        try { 
 
            ChannelFuture future = b.connect(); 
            future.addListener(new ChannelFutureListener() { 
                @Override 
                public void operationComplete(ChannelFuture future) throws Exception { 
                    if (future.isSuccess()) { 
                        System.out.println("Started Tcp Client: " + serverIp); 
                    } else { 
                        System.out.println("Started Tcp Client Failed: "); 
                    } 
                    if (future.cause() != null) { 
                        future.cause().printStackTrace(); 
                    } 
 
                } 
            }); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
    }

断线重连

来看断线重连的关键代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@ChannelHandler.Sharable 
public class RobotClient extends SimpleChannelInboundHandler<RobotProto>  { 
    @Override 
    public void channelUnregistered(ChannelHandlerContext ctx) throws Exception { 
        // 状态重置 
        isConnected = false; 
        this.serverStatus = -1; 
 
        final EventLoop loop = ctx.channel().eventLoop(); 
        loop.schedule(new Runnable() { 
            @Override 
            public void run() { 
                doConnect(configureBootstrap(new Bootstrap(), loop)); 
            } 
        }, 1, TimeUnit.SECONDS); 
    } 
}
 
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深度学习基础之matplotlib,一文搞定各个示例
Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用 ,Matplotlib也是深度学习的常用绘图库,主要是将训练的成果进行图形化,因为这样更直观,更方便发现训练中的问题,今天来学习下,走起!!
香菜聊游戏
2021/10/19
1.5K0
深度学习基础之matplotlib,一文搞定各个示例
Python数据分析之matplotlib(基础篇)
在matplotlib中,整个图像为一个Figure对象。在Figure对象中可以包含一个,或者多个Axes对象。每个Axes对象都是一个拥有自己坐标系统的绘图区域。其逻辑关系如下:
AI异构
2020/07/29
4470
Python数据分析之matplotlib(基础篇)
Python进阶之Matplotlib入门(九)
Matplotlib是Python的画图领域使用最广泛的绘图库,它能让使用者很轻松地将数据图形化以及利用它可以画出许多高质量的图像,是用Python画图的必备技能。对于这个教程,大家最好亲自码一遍代码,这样可以更有收获。
HuangWeiAI
2019/12/17
6710
Python进阶之Matplotlib入门(九)
【3】超级详细matplotlib使用教程,手把手教你画图!(多个图、刻度、标签、图例等)
matplotlib的图像都位于Figure对象中,你可以用plt.figure创建一个新的Figure.在subplot上进行绘制
汀丶人工智能
2022/12/21
1.7K0
【3】超级详细matplotlib使用教程,手把手教你画图!(多个图、刻度、标签、图例等)
【Python进阶】带你使用Matplotlib进行可视化
欢迎来到专栏《Python进阶》。在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件、数据的处理,Python各种好用的库如NumPy、Scipy、Matplotlib、Pandas的使用等等。我们的初心就是带大家更好的掌握Python这门语言,让它能为我所用。
用户1508658
2019/08/06
1.3K0
孔乙己:你可知subplot有几种写法?
话说,这篇文章我本来想起个名字叫《如何用Python画子图》,然后我看了一眼公众号后台:
bugsuse
2021/01/04
2K0
孔乙己:你可知subplot有几种写法?
掌握进阶:高级功能、图表定制与地理数据绘制
Matplotlib是一个功能强大的数据可视化库,为数据科学家提供了丰富的工具和功能,可以以直观的方式呈现数据。
一键难忘
2023/12/19
9660
python数据分析之Matplotlib学习笔记
说到绘图,那必须要有一个画板。Figure作为一个“老画板”,在matlab中经常能看到它的出没,在python中,它的具体语法是什么呢?让我们来看一下。
远方的星
2021/07/31
8610
python数据分析之Matplotlib学习笔记
我的机器学习matplotlib篇导入画出第一个图形颜色,标记,线型刻度、标题、标签和图例!创建子图
前言: matplotlib是python最常用的绘图库,能帮你画出美丽的各种图 导入 包含了中文显示,屏外显示 import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np %matplotlib tk #解决中文不显示问题 mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False 画出第
DC童生
2018/04/27
1.5K0
我的机器学习matplotlib篇导入画出第一个图形颜色,标记,线型刻度、标题、标签和图例!创建子图
[机器学习实战札记] matplotlib绘图基础
在机器学习中,通常会涉及到大量的数据。如果直接观看这些原始数据,很难从中看出有用的信息。人类是非常视觉的生物,当我们看到可视化的东西时,会更好地理解事物。在python中,有一个强大的工具matplotlib来帮助我们,用图形化的方式来展现数据。在《机器学习实战》一书中,就多处使用了matplotlib来绘制图形,帮助我们理解数据和学习算法。
云水木石
2019/07/01
1.2K0
[机器学习实战札记] matplotlib绘图基础
Matplotlib使用笔记
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
村雨遥
2019/09/09
5700
Python绘制参数方程图
pyplot的方式中plt.subplot()参数和面向对象中的add_subplot()参数和含义都相同
云深无际
2021/05/18
1.8K0
Python绘制参数方程图
Matplotlib数据可视化:三大容器对象与常用设置
上一篇说到,matplotlib中所有画图元素(artist)分为两类:基本型和容器型。容器型元素包括三种:figure、axes、axis。一次画图的必经流程就是先创建好figure实例,接着由figure去创建一个或者多个axes,然后通过axes实例调用各种方法来添加各种基本型元素,最后通过axes实例本身的各种方法亦或者通过axes获取axis实例实现对各种元素的细节操控。 本篇博客继续上一节的内容,展开介绍三大容器元素创建即通过三大容器可以完成的常用设置。
统计学家
2020/05/16
1K0
python绘图与数据可视化(二)
上一次是于老师要求我做一次备课,讲一节课,上周于老师又自己准备了这个课程,这里放一下于老师课上补充的知识点
十二惊惶
2024/02/28
3790
python绘图与数据可视化(二)
Python3快速入门(十六)——Mat
Matplotlib是 Python 2D-绘图领域使用最广泛的套件,可以简易地将数据图形化,并且提供多样化的输出格式。 matplotlib有两个接口,一个是状态机层的接口,通过pyplot模块来进行管理;一个是面向对象的接口,通过pylab模块将所有的功能函数全部导入其单独的命名空间内。
py3study
2020/01/03
1.4K0
Python数据可视化-第5章-子图的绘制及坐标轴共享
使用pyplot模块的subplot()函数可以在规划好的某个区域中绘制单个子图。
用户2225445
2025/04/01
2630
Python数据可视化-第5章-子图的绘制及坐标轴共享
(七)Python绘图基础:Matplotlib绘图
        除了使用scatter函数之外,还可以使用plot函数后加参数'o'来实现,代码如下所示:
小点点
2022/12/12
2.1K0
(七)Python绘图基础:Matplotlib绘图
python可视化图表(python 显示图片)
它是用来创建 总画布/figure“窗口”的,有figure就可以在上边(或其中一个子网格/subplot上)作图了,(fig:是figure的缩写)。
全栈程序员站长
2022/08/01
9330
python可视化图表(python 显示图片)
趋势(一)利用python绘制折线图
折线图用于在连续间隔或时间跨度上显示定量数值,最常用来显示趋势和关系(与其他折线组合起来)。折线图既能直观地显示数量随时间的变化趋势,也能展示两个变量的关系。
HsuHeinrich
2024/11/23
2050
趋势(一)利用python绘制折线图
matplotlib的多图合并
本文是我在学习莫烦老师视频教程时候整理的笔记。Matplotlib是一个python的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。通过Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,直方图,功率谱,条形图,散点图等。承接上文:
触摸壹缕阳光
2020/04/26
1.8K0
推荐阅读
相关推荐
深度学习基础之matplotlib,一文搞定各个示例
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验