前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
回顾基础--HTML篇
打不着的大喇叭
2024/03/11
6890
回顾基础--HTML篇
【HTML】HTML 表格 ③ ( 合并单元格 | 跨行合并 | 跨列合并 | 单元格合并顺序 | 跨行设置 rowspan 属性 | 跨列设置 colspan 属性 )
文章目录 一、合并单元格 1、合并单元格方式 2、合并单元格顺序 3、合并单元格流程 二、合并单元格示例 1、原始表格 2、跨行合并单元格 3、跨列合并单元格 一、合并单元格 ---- 1、合并单元格方式 单元格合并方式 : 跨行合并 : 垂直方向上的 上下 单元格合并 是 跨行合并 , 在 <td> 单元格标签 中 使用 rowspan 属性 , 设置跨行合并单元格数 ; 跨列合并 : 水平方向上的 左右 单元格合并 是 跨列合并 , 在 <td> 单元格标签中 使用 colspan 属性 , 设置
韩曙亮
2023/03/30
9.2K0
【HTML】HTML 表格 ③ ( 合并单元格 | 跨行合并 | 跨列合并 | 单元格合并顺序 | 跨行设置 rowspan 属性 | 跨列设置 colspan 属性 )
【Web前端技术】第三节—HTML标签(下)
表格主要 用于显示、展示数据, 因为它可以让数据显示的非常的规整,可读性非常好。特别是后台展示数据的时候,能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 【 表格不是用来布局页面的,而是用来 展示数据 的。】
云边有个稻草人
2025/04/23
1030
【Web前端技术】第三节—HTML标签(下)
HTML笔记(4)
一定要记得删除多余的单元格,否则会出现很多奇奇怪怪的格子,另外这个非常能锻炼到表格的运用,还有对单元格的定位。
y191024
2022/09/20
8980
HTML笔记(4)
HTML标签(二)
表格是用来显示数据的,那么列表就是用来布局的。 列表最大的特点就是整齐、整洁、有序,它作为布局会更加自由和方便。 根据使用情景不同,列表可以分为三大类:无序列表、有序列表和自定义列表。
P_M_P
2024/01/25
2790
HTML标签(二)
【HTML】HTML 表格 ② ( 表头单元格标签 | 表格标题标签 )
表头单元格 可以在表格中 用作第一排 作为表格 的 表头 使用 , 表头单元格 中的 文本设置 可以与 普通单元格 中的文本设置 不同 ;
韩曙亮
2023/03/30
6.9K0
【HTML】HTML 表格 ② ( 表头单元格标签 | 表格标题标签 )
HTML结构
在 IDEA 中创建文件 xxx.html , 直接输入 ! , 按 tab 键, 此时能自动生成代码的主体框架.
半截诗
2025/03/08
1390
【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)
<table>标签包含<tr>标签,<tr>标签包含<td>标签或者<th>标签。
枫叶丹
2024/08/06
1780
【海贼王航海日志:前端技术探索】HTML你学会了吗?(二)
标签之美五——网页表格的设计 原
1、<table></table>:表格的开始和结束标签,行列的布局都在<table>标签内。
珲少
2018/08/15
1.2K0
标签之美五——网页表格的设计
                                                                            原
html基础知识点合集
HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标签语言”。是用来描述网页的一种语言。
对话、
2022/02/22
2.4K0
html基础知识点合集
php学习之html属性-表格(六)
1.表格标记 表格的语法: <table> <tr> <th>编号</th>           //标题单元格(表头) <th>姓名</th> <th>年龄</th> </tr> <tr> <td>001</td>      //普通单元格 <td>张三</td> <td>23</td> </tr> ....... </table> table标记的属性: border:表格边框                        值:数字 align:表格在网页中的水平方向  
吾爱乐享
2018/07/12
2.5K0
【前端基础篇】HTML零基础速通
在 IDEA 中创建文件 xxx.html , 直接输入 ! , 按 tab 键, 此时能自动生成代码的主体框架.
半截诗
2024/10/09
1570
【前端基础篇】HTML零基础速通
【HTML】img标签和超链接标签
椰椰椰耶
2024/10/15
1870
【HTML】img标签和超链接标签
Day2:html和css
表格用table,tr代表表格中的一行,必须在table标签中,td用于表示表格中的单元格,<tr></tr>表格中的一行.
达达前端
2019/07/03
1.4K0
HTML/CSS 第二章
跨行合并 rowspan 上下合并 将rowspan写在上面的单元格上 跨列合并 colspan 左右合并 将colspan写在左边的单元格上
用户3461357
2019/08/02
1.3K0
前端学习 20220824
Marigold
2023/08/24
2120
【HTML5】html5开篇基础(3)
在 HTML 中,可以使用 <table> 标签创建表格,并通过 rowspan 和 colspan 属性来合并单元格。
E绵绵
2024/09/29
2910
【HTML5】html5开篇基础(3)
【HTML】HTML 表格 ① ( 表格标签 | 行标签 | 单元格标签 | table 表格属性 | border 属性 | align 属性 | width 属性 | height 属性 )
文章目录 一、表格标签组成 ( 表格标签 | 行标签 | 单元格标签 ) 二、table 表格属性 ( border 属性 | align 属性 | width 属性 | height 属性 ) 一、表格标签组成 ( 表格标签 | 行标签 | 单元格标签 ) ---- HTML 表格 由 3 种标签 组成 : 表格 涉及 的标签都是 双标签 ; 表格标签 : 表格最 外围的标签 , 用于包裹整个表格 ; 其中 包含若干 tr 行标签 ; <table>整个表格内容</table> 行标签 : 标签内是
韩曙亮
2023/03/30
4.3K0
【HTML】HTML 表格 ① ( 表格标签 | 行标签 | 单元格标签 | table 表格属性 | border 属性 | align 属性 | width 属性 | height 属性 )
【Web前端】“从零开始的HTML 表格”
HTML 表格是一种用于在网页上组织和显示信息的结构性元素,它能够将数据以行和列的形式呈现,帮助用户更清晰地理解数据关系。表格在展示统计数据、产品列表、日程安排等方面非常实用。
一条晒干的咸鱼
2024/11/19
1370
【Web前端】“从零开始的HTML 表格”
前端成神之路-HTML(table)
存在即是合理的。 表格的现在还是较为常用的一种标签,但不是用来布局,常见显示、展示表格式数据。
海仔
2020/10/27
1.4K0
前端成神之路-HTML(table)
推荐阅读
相关推荐
回顾基础--HTML篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验