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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Vue】Vue集成Element-UI框架
Element-UI官网:点击进入 Element-UI 是一套基于 Vue 2.0 的桌面端组件库,由饿了么前端团队推出并进行开源。它提供了丰富的 PC 端组件,简化了常用组件的封装,大大降低了开发难度,使开发人员能够轻松构建功能强大、风格统一的页面。Element-UI 与 Vue.js 集成非常紧密,开发者可以轻松地将 Element-UI 的组件嵌入到他们的 Vue.js 应用程序中。
颜颜yan_
2024/03/24
2850
【Vue】Vue集成Element-UI框架
vue线上项目加载速度提升
首先在index.js里面引入一些cnd资源(vue,vueRoute,elementUI)
biaoblog.cn 个人博客
2022/08/11
4320
SpringBoot 整合文件上传 elment Ui 上传组件
用户7630333
2023/12/07
3740
SpringBoot 整合文件上传 elment Ui 上传组件
【Python100天学习笔记】Day29 UI框架-Element
UI框架 - Element 基于Vue 2.0的桌面端组件库,用于构造用户界面,支持响应式布局。 引入Element的CSS和JavaScript文件。 <!-- 引入样式 --> <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css"> <!-- 引入组件库 --> <script src="https://unpkg.com/element-ui/lib/index.js"></scrip
天道Vax的时间宝藏
2022/04/01
2520
【Python100天学习笔记】Day29 UI框架-Element
利用element显示Notification通知,复制提醒,禁用F12或右键菜单提醒
前言 element弹窗效果挺好看的,就分享给大家了! 效果演示 image.png image.png 食用方法 一、引入cdn资源 <!-- 引入VUE --> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.14/dist/vue.min.js"></script> <!-- 引入组件库 --> <script src="https://cdn.jsdelivr.net/npm/element-ui@2.15.6/lib/index.js"></
你的明明呐丶
2022/06/27
1.4K0
利用element显示Notification通知,复制提醒,禁用F12或右键菜单提醒
SpringBoot的前后端分离--下拉数据
后台:gitee:https://gitee.com/zhangjiqun/background-development-demo.git
zhangjiqun
2024/12/16
920
SpringBoot的前后端分离--下拉数据
纯静态引入.vue文件之http-vue-loader.js
在最早之前,我做过纯静态的项目引入vue当作模板引擎,就是那种没有任何打包压缩的项目,就是单纯的引入css、js、html的项目。现在应该是很少有这样的项目了,很少不代表没有,起码我现在在撸jq的项目(现在jq贼溜)。
wade
2021/10/25
3.6K0
纯静态引入.vue文件之http-vue-loader.js
ElementUI实现表格分页功能
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>表格数据分页</title> <link rel="stylesheet" hr
明知山
2020/09/03
1.4K0
ElementUI响应式布局bug、其中中el-col-sm-0会导致响应式布局失效的解决方法
如下布局,如果将:sm="0"则会导致456始终不显示 下面得响应式布局目的就是希望在sm也就是屏幕宽度在小于992px时将456隐藏,不显示,但是如果这样做就会出现bug
全栈程序员站长
2022/11/09
1.2K0
ElementUI响应式布局bug、其中中el-col-sm-0会导致响应式布局失效的解决方法
Vue webpack 压缩打包上线 首屏加载时间过长 优化方案
最近博客上线,但是在首次加载的时候,需要消耗很多时间,大概在50秒左右,就是说第一页登录页面,就需要用户等待50秒(服务器是最低配置也是一个原因),看了一下network,发现有两个文件加载的时间特别长,一个是vendor.js,一个是app.js,打包的时候,这两个文件也提示文件过大
Autooooooo
2020/11/09
1.9K0
Vue webpack 压缩打包上线 首屏加载时间过长 优化方案
jsp使用vue+element-ui
因需要做界面美化,所以需要使用element-ui,原生jsp能实现的效果,实在是太少了。
崔笑颜
2020/06/08
3.9K0
EasyNVR配置表单上传demo说明
从功能上来说,EasyNVR自身因其界面美观,不仅可以单独作为音视频流媒体业务系统使用,也可以作为设备端与第三方平台接入使用;从界面来说,简洁,明朗,更加方便用户操作。在用户使用过程中,我们也会根据用户的需求对相关功能进行优化和提升,满足绝大多数用户的需求。本文我们分享一下EasyNVR配置表单上传demo说明。
TSINGSEE青犀视频
2021/09/18
4750
Html | Vue | Element UI——引入使用
做个项目,需要一个效果刚好Element UI有,就想配合Vue和Element UI,放在tp5.1下使用,但是引入在线的地址各种报错,本地引入就完美的解决了问题!
思索
2024/08/16
1310
Html | Vue | Element UI——引入使用
使用axios下载文件
如果只是简单的下载,我们可以简单使用a标签请求后端就可以了,不过一旦涉及到后端报错的回调、等待动画、进度条这种的,就没有任何办法了。
半月无霜
2024/08/15
3970
Avue - 更加贴合企业开发的数据驱动前端开发框架
Vue 作为最为广泛使用的前端开发框架之一,拥有许多的组件库,但他们通常提供较为基本的组件,应用到业务上往往还需要大量的封装。Avue,基于 element-ui / element-plus,提供了数据驱动视图的二次封装,目标是简化开发工作。 ◆ 简介 Avue,是 smallweigit 在 Gitee 上开源的基于 Vue 的前端开发框架,仓库位于 https://gitee.com/smallweigit/avue,目前提供了基于 Vue 2.x 的 v2.9.4 版本和基于 Vue 3.x 的
IT大咖说
2022/04/11
2.1K0
Avue - 更加贴合企业开发的数据驱动前端开发框架
ElementUI完整引入及按需引入项目开发
官方安装教程 安装 npm i element-ui -S 完整引入 main.js引入 import Vue from 'vue' import App from './App' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) Vue.config.productionTip = false new Vue({ el: '#app', co
明知山
2022/05/05
7570
基于Vue、ElementUI的换肤解决方案
换肤这个功能,不能算是很常见,但是也是有需求的,所以这里提供几种前端的换肤解决方案,供大家参考。
零式的天空
2022/03/27
5.4K2
基于Vue、ElementUI的换肤解决方案
Vue-CLI项目快速UI布局-element-ui
https://element.eleme.cn/#/zh-CN/component/installation
小小咸鱼YwY
2019/09/11
5750
4.vue 的双向绑定的原理是什么?_Vue双向绑定原理
所谓双向绑定,指的是vue实例中的data与其渲染的DOM元素的内容保持一致,无论谁被改变,另一方会相应的更新为相同的数据。
全栈程序员站长
2022/11/02
5410
Element UI本地引用及图标显示异常问题
想要本地引用就直接打开这两个链接去下载对应的js和css文件就好了。 因为我的项目比较老,所以这里使用本地引用
崔笑颜
2020/06/08
3.1K1
推荐阅读
相关推荐
【Vue】Vue集成Element-UI框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验