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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在Ubuntu 16.04上的Jenkins中设置持续集成管道
Jenkins是一个开源的自动化服务器,目的是能够自动执行持续集成和交付软件所涉及的重复性技术任务。凭借强大的插件生态系统,Jenkins可以处理各种工作负载,构建,测试和部署应用程序。
无敌小笼包
2018/08/01
6.3K0
如何在Ubuntu 16.04上的Jenkins中设置持续集成管道
如何在Ubuntu 16.04上使用Concourse CI设置持续集成管道
Concourse CI是一个现代的,可扩展的集成系统,旨在通过可组合的声明性语法自动测试管道。
GeekZ
2018/08/10
4.4K0
如何在Ubuntu上安装Buildbot
Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。它使用Python的Twisted库来处理buildmaster和多个worker之间的异步通信,以便在多个平台上测试构建。Buildbot具有高度可配置性并且几乎可秒级应对构建过程,使其适用于复杂的构建过程或需要其工具随项目的独特需求而增长的项目。在本教程中,我们将在同一台机器上安装和配置Buildbot buildmaster和worker。
林岑影
2018/07/27
2.3K0
如何在Ubuntu上安装Drone持续集成环境
Drone是一个流行的持续集成和交付平台。它集成了许多流行的版本控制存储库服务,如GitHub,GitLab和Bitbucket,以监视代码更改并在提交时自动构建和测试更改。
小铁匠米兰的v
2018/08/08
3K0
如何在Ubuntu上安装Drone持续集成环境
如何使用Node.js和Github Webhooks保持远程项目同步
在处理具有多个开发人员的项目时,当一个人推送到存储库然后另一个人开始对过时版本的代码进行更改时,这可能会令人沮丧。像这些花费时间的错误,这使得设置脚本以保持您的存储库同步是值得的。您还可以在生产环境中应用此方法以快速推送修补程序和其他更改。
小翼111
2018/11/05
3.9K0
Ubuntu上如何使用GitLab CI搭建持续集成Pipeline
GitLab Community Edition是一个自托管的Git存储库提供程序,具有帮助项目管理和软件开发的附加功能。GitLab提供的最有价值的功能之一是内置的持续集成和交付工具GitLab CI。
爆栈工程师
2018/08/13
4K0
Ubuntu上如何使用GitLab CI搭建持续集成Pipeline
基于GitLab+Docker+K8S的持续集成和交付
此文档主要说明怎样基于GitLab进行持续集成和持续交付,该持续集成与交付集成了gitlab-runner 、mvnw、Docker、harbor、k8s等技术,同时展示了在k8s平台利用EFK(elasticsearch,fluentd,kibana)技术完成了集群统一日志管理,使用kube-prometheus技术进行集群实时监控以及kube-dashboard管理集群中的应用部署,为了不引入网络问题,本环境的相关VPC机器已经关闭了本机防火墙。
互扯程序
2019/05/14
3.1K0
基于GitLab+Docker+K8S的持续集成和交付
如何在Ubuntu上使用Webhooks和Slack部署React
Webhook,也就是人们常说的钩子,是一个很有用的工具。你可以通过定制 Webhook 来监测你在 Github.com 上的各种事件,最常见的莫过于 push 事件。如果你设置了一个监测 push 事件的 Webhook,那么每当你的这个项目有了任何提交,这个 Webhook 都会被触发,这时 Github 就会发送一个 HTTP POST 请求到你配置好的地址。
独钓寒江雪_Ly
2018/08/13
8.9K0
如何在Ubuntu上使用Webhooks和Slack部署React
给Buildbot加上SSL,使用Nginx做反向代理
Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布。Buildbot自带内置的Web服务器并使用8010端口,为了使用SSL保护Web界面,我们需要用Nginx配置反向代理。
木纸鸢
2018/07/27
1.3K0
给Buildbot加上SSL,使用Nginx做反向代理
基于 Docker 的 Jenkins 持续集成与持续部署
基于微服务的系统架构,功能的叠加,对应的服务的数量也在增加,大小功能的快速迭代,更加要求部署的快速化,智能化。
DevOps时代
2019/09/16
3.4K0
基于 Docker 的 Jenkins 持续集成与持续部署
k8s的持续集成(jenkins+gitlab+k8s)
root@k8s-master1 docker.yml# kubectl get node
不凡
2021/08/19
3.7K1
从零搭建前端持续集成环境: github+jenkins+nodejs+nginx
本文将展示整个持续集成过程的搭建,这对于devops运维工程师来说是很轻松的事情,这里更想给新手开发人员,特别是前端开发人员对于CICD的基础参考,整个过程实践包含以下三点:
志亮
2021/03/10
1.7K0
从零搭建前端持续集成环境: github+jenkins+nodejs+nginx
如何在Ubuntu上使用Jenkins自动构建
Jenkins是一个开源自动化服务器,允许您构建管道以自动化构建,测试和部署应用程序的过程。在本指南中,您将实施基本工作流程,以加快持续集成和持续交付(CI / CD)过程。
Techeek
2018/09/18
8.2K0
如何在Ubuntu上使用Jenkins自动构建
利用Gitlab和Jenkins做CI(持续集成)
最近用到持续集成顺便总结在这里,都是用的最新版。搭建过程中还有一个demo,提交代码到 gitlab 自动触发 jenkins 任务,自动编译代码和 docker 镜像并上传。
imroc
2018/09/03
7.5K0
利用Gitlab和Jenkins做CI(持续集成)
如何在Ubuntu 16.04上安装和保护Grafana
在本教程中,您将安装Grafana并使用SSL证书和Nginx反向代理保护它,然后您将修改Grafana的默认设置以获得更高的安全性。
宇cccc
2018/07/31
3.5K0
如何在Ubuntu 16.04上安装和保护Grafana
如何在Ubuntu 16.04上安装Concourse CI
Concourse CI是一个现代的,可扩展的持续集成系统,旨在通过可组合的语法自动化测试管道。由于早期CI系统的成功,Concourse旨在简化管道管理过程并消除“雪花”服务器,以便测试服务器与其处理的代码一样受到监管。
黑色技术
2018/08/07
9950
如何在Ubuntu 16.04上安装Concourse CI
21 个好用的持续集成工具,总有一款适合你
市场上持续集成工具众多,找到一个合适的工具并非易事,下面介绍了 21 个比较受欢迎的 CI 工具,并附上了下载链接。
DevOps时代
2019/05/17
2.8K0
Gitlab CI 搭建持续集成环境实现Docker自动化部署使用Harbor镜像仓库
本文简单介绍了持续集成的概念并着重介绍了如何基于 Gitlab CI 快速构建持续集成环境以及使用Docker实现自动化部署,主要介绍了 Gitlab CI 的基本功能和入门操作流程
小东啊
2019/06/26
4K0
Gitlab CI 搭建持续集成环境实现Docker自动化部署使用Harbor镜像仓库
私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)
提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记
莫问今朝
2022/03/08
2.5K0
私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)
『Jenkins』使用Jenkins实现持续集成与持续交付
持续集成(Continuous Integration,CI)是指开发人员频繁地将代码合并到主干,并通过自动化构建和自动化测试来验证代码的正确性。CI的主要目的是:
数字扫地僧
2025/01/19
2720
推荐阅读
相关推荐
如何在Ubuntu 16.04上的Jenkins中设置持续集成管道
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验