本文来说下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心跳机制与断线重连的相关推荐

  1. 浅析 Netty 实现心跳机制与断线重连

    基础 何为心跳 顾名思义, 所谓 心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不可 ...

  2. Netty——心跳机制与断线重连

    心跳机制与断线重连 心跳机制 IdleStateHandler 客户端 服务端 测试 正常情况 异常情况 总结 断线重连 为了保证系统的稳定性,心跳机制和断线重连可是必不可少的,而这两个在Netty中 ...

  3. WebSocket的心跳机制和断线重连

    背景 在服务器重启或是弱网情况下,前端不能保证一直连接成功.因此在出现被动断开的情况下,需要有心跳机制和断线重连的功能. 心跳机制:客户端每隔一段时间向服务端发送一个特有的心跳消息,每次服务端收到消息 ...

  4. 服务的心跳机制与断线重连,Netty底层是怎么实现的?

    作者:sprinkle_liz www.jianshu.com/p/1a28e48edd92 提醒:本篇适合有一定netty基础的读者阅读 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客 ...

  5. 面试官问:服务的心跳机制与断线重连,Netty底层是怎么实现的?懵了

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, ...

  6. Netty实现心跳机制与断线重连

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:https://www.jianshu.com/p/ ...

  7. 四、Netty 实现心跳机制与断线重连

    一.概述 何为心跳 顾名思义, 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确保 TCP 连接的有效性. 为什么需要心跳 因为网络的不 ...

  8. 用Netty撸一个心跳机制和断线重连!

    来源:www.jianshu.com/p/1a28e48edd92 心跳机制 何为心跳 所谓心跳, 即在 TCP 长连接中, 客户端和服务器之间定期发送的一种特殊的数据包, 通知对方自己还在线, 以确 ...

  9. Netty 心跳机制及断线重连

    1.心跳检测 心跳检测是在TCP长连接中,客户端和服务端定时向对方发送数据包通知对方自己还在线,保证连接的有效性的一种机制. 为什么使用心跳检测? 假死:如果底层的TCP连接(socket连接)已经断 ...

最新文章

  1. R语言ggplot2可视化:可视化所有日期不同时段任务的持续时间、将持续时间绘制成一条线(起始时间到结束时间),y轴表示活动发生的日期,x轴表示以小时为单位的时间、适应时间段跨越多天的情况
  2. Openstack 小知识点
  3. 史上最全的机器学习资料(上)
  4. Android复习15【动画:创建资源文件夹、创建动画资源文件、组合动画、属性动画、材料设计新特性】
  5. 如何在QT中读取串口数据
  6. 安装 RAILS ANNOTATE_MODELS 插件.
  7. 大剑无锋----SpringMVC原理详细解析
  8. 『软件工程9』结构化系统分析——解决软件“做什么”问题
  9. Luogu P4168 [Violet]蒲公英 分块
  10. 3.2_ 1_ 虚拟内存的基本概念
  11. vue引用electron_前端跨平台桌面开发技术:Electron 快速起步
  12. Mysql学习总结(30)——MySQL 索引详解大全
  13. Qt线程和signal-slot
  14. python有什么用途-Python是什么 Python的用处
  15. 装机主板抽象工厂模式(Abstract Factory)
  16. 浪涌保护器ant120_ANT120/530/1P浪涌保护器服务周到漳州
  17. android 疯狂猜成语 源码,安卓版疯狂猜成语答案图文全解
  18. 面试拆解:系统上线后Cpu使用率飙升如何排查?
  19. 跟青翼一起学Qt4编程系列 之 2-1标准对话框
  20. 颜色搭配之BUTTONS 1.0

热门文章

  1. 阿里巴巴在宁成立江苏总部
  2. Winform Echarts 显示百度地图的用法(3)
  3. 搜索引擎特征码(转)
  4. 广州运营开放式数据交易平台发力大数据业务
  5. hadoop rpc客户端初始化和调用过程详解
  6. JQuery URL的GET参数值获取方法
  7. 隐马尔科夫模型(Hidden Markov Models) 系列之三
  8. “远程桌面己停止工作”的解决方法
  9. 访问者(Visitor Pattern )模式
  10. LeetCode 209. 长度最小的子数组