Netty是如何实现TCP心跳机制与断线重连的
本文来说下Netty 是如何实现 TCP 心跳机制与断线重连的
文章目录
- 什么是心跳机制HeartBeat
- 如何实现心跳机制
- Netty实现自定义的心跳机制
- 服务端
- 客户端
- 测试效果
- 客户端断线重连
- 本文小结
什么是心跳机制HeartBeat
在 TCP 长连接 keepAlive 的应用场景下,client 端一般不会主动关闭它们之间的连接,Client 与 Server 之间的连接如果一直不关闭的话,随着客户端连接越来越多,Server 早晚有扛不住的时候,这时候 Server 端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致 Server 端服务受损
所谓心跳机制 / 心跳检测, 即在 TCP长连接中 , 客户端每隔一小段时间向服务器发送一个数据包,通知服务器自己仍然在线, 以确保 TCP连接的有效性.
如何实现心跳机制
我们可以通过两种方式实现心跳机制:
使用 TCP 协议层面的 keepalive 机制。在 Netty 中使用该策略:
.childOption(ChannelOption.SO_KEEPALIVE, true);
在应用层上实现自定义的心跳机制.,虽然在 TCP 协议层面上, 提供了 keepalive 保活机制, 但是使用它有几个缺点:
- 它不是 TCP 的标准协议, 并且是默认关闭的.
- TCP keepalive 机制依赖于操作系统的实现, 默认的 keepalive 心跳时间是 两个小时, 并且对 keepalive 的修改需要系统调用(或者修改系统配置), 灵活性不够.
- TCP keepalive 与 TCP 协议绑定, 因此如果需要更换为 UDP 协议时, keepalive 机制就失效了.
虽然使用 TCP 层面的 keepalive 机制比自定义的应用层心跳机制节省流量, 但是基于上面的几点缺点, 一般的实践中, 人们大多数都是选择在应用层上实现自定义的心跳,一般我们自己实现的大致策略是这样的:
- Client 启动一个定时器,不断向客户端发送心跳
- Server 收到心跳后,做出回应;
- Server 启动一个定时器,判断 Client 是否存在,这里做判断有两种方法:时间差和简单标识。
① 时间差:
- 收到一个心跳包之后记录当前时间;
- 判断定时器到达时间,计算多久没收到心跳时间 = 当前时间 - 上次收到心跳时间。如果该时间大于设定值则认为超时。
② 简单标识:
- 收到心跳后设置连接标识为 true
- 判断定时器到达时间,如果未收到心跳则设置连接标识为false
下面我们来看看基于 Netty 如何实现应用层上的心跳机制
Netty是如何实现TCP心跳机制与断线重连的相关推荐
- 浅析 Netty 实现心跳机制与断线重连
基础 何为心跳 顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不可 ...
- Netty——心跳机制与断线重连
心跳机制与断线重连 心跳机制 IdleStateHandler 客户端 服务端 测试 正常情况 异常情况 总结 断线重连 为了保证系统的稳定性,心跳机制和断线重连可是必不可少的,而这两个在Netty中 ...
- WebSocket的心跳机制和断线重连
背景 在服务器重启或是弱网情况下,前端不能保证一直连接成功.因此在出现被动断开的情况下,需要有心跳机制和断线重连的功能. 心跳机制:客户端每隔一段时间向服务端发送一个特有的心跳消息,每次服务端收到消息 ...
- 服务的心跳机制与断线重连,Netty底层是怎么实现的?
作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 提醒:本篇适合有一定netty基础的读者阅读 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客 ...
- 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, ...
- Netty实现心跳机制与断线重连
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:https://www.jianshu.com/p/ ...
- 四、Netty 实现心跳机制与断线重连
一.概述 何为心跳 顾名思义, 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不 ...
- 用Netty撸一个心跳机制和断线重连!
来源:www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确 ...
- Netty 心跳机制及断线重连
1.心跳检测 心跳检测是在TCP长连接中,客户端和服务端定时向对方发送数据包通知对方自己还在线,保证连接的有效性的一种机制. 为什么使用心跳检测? 假死:如果底层的TCP连接(socket连接)已经断 ...
最新文章
- R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间、适应时间段跨越多天的情况
- Openstack 小知识点
- 史上最全的机器学习资料(上)
- Android复习15【动画:创建资源文件夹、创建动画资源文件、组合动画、属性动画、材料设计新特性】
- 如何在QT中读取串口数据
- 安装 RAILS ANNOTATE_MODELS 插件.
- 大剑无锋----SpringMVC原理详细解析
- 『软件工程9』结构化系统分析——解决软件“做什么”问题
- Luogu P4168 [Violet]蒲公英 分块
- 3.2_ 1_ 虚拟内存的基本概念
- vue引用electron_前端跨平台桌面开发技术:Electron 快速起步
- Mysql学习总结(30)——MySQL 索引详解大全
- Qt线程和signal-slot
- python有什么用途-Python是什么 Python的用处
- 装机主板抽象工厂模式(Abstract Factory)
- 浪涌保护器ant120_ANT120/530/1P浪涌保护器服务周到漳州
- android 疯狂猜成语 源码,安卓版疯狂猜成语答案图文全解
- 面试拆解:系统上线后Cpu使用率飙升如何排查?
- 跟青翼一起学Qt4编程系列 之 2-1标准对话框
- 颜色搭配之BUTTONS 1.0