​Netty 心跳 与 空闲 监测

微信公众号

王皓的GitHub:https://github.com/TenaciousDWang

今天来说一下关于心跳与空闲检测,为什么需要说这两个东西呢?在因为在网络中凡是涉及到端到端的通信都会遇到一个问题就是假死。

我们知道一个TCP连接建立需要三次握手,断开连接需要四次挥手,原理过程这里就不长篇大论了,通俗一点讲就是:

三次握手

男生:做我女朋友吧。

女生:好的。

男生:好的。(可以抱女生了)

四次挥手

男生:我们分手吧。

女生:好的,我收拾一下(此时男生不能抱女生了)。

女生:我收拾好了,我们分手。(此时女生不能抱男生了)。

男生:好的。

这里我们的假死主要是在四次挥手阶段,其中任何一个环节出现问题,都可能导致TCP底层断开后,应用层程序并没有捕获到,导致该连接假死,如果存在大量的假死连接没有关闭,就会导致在服务端浪费资源,导致性能下降,最终崩溃。

服务端假死时,客户端发送数据无响应,一直在等待,影响客户端体验。导致连接假死有可能是程序问题,也有可能是因为网络原因,为了避免此类情况的发生,通常我们会使用心跳机制与空闲检测。

接下来我们先来说一下服务端,Netty为我们提供了一个IdleStateHandler处理器,使用方法如下:

我们继承父类IdleStateHandler,在构造方法内调用父类的构造函数。

super(READER_IDLE_TIME, 0, 0, TimeUnit.SECONDS);

第一个参数是读空闲时间,第二个参数为写空闲时间,第三个参数为读写空闲时间,第四个参数为时间单位,我们设置第一个读空闲时间为15秒,即十五秒内没有读取到该连接的数据,就判断该连接假死。第二和第三个参数我们设置为0,即忽略这两种情况。

当判断为假死时,Netty会回调channelIdle方法,我们覆写该方法,直接关闭连接,释放资源。

我们将空闲检测放在逻辑处理链最头上,优先判断,现在服务端15秒读取不到数据就会判断假死,为了防止误判,服务端需要每15秒内向服务端发送心跳数据。

我们来为客户端创建一个定时发送心跳数据的处理器HeartBeatTimerHandler与心跳数据包对象。

当连接建立时回调channelActive方法,我们使用executor方法返回当前channel绑定的NIO线程,使用schedule方法执行定时五秒发送一次,取的是服务端15秒空闲检测的三分之一,这个不强制,随意,但是要考虑到两端性能及网络问题。

现在客户端向服务端定时发送心跳数据,服务端可以知道客户端连接是否假死了,同理客户端也需要知道服务端是否假死,原理基本一致,我们来看一下如何实现,首先来定义一个心跳响应数据包。

在服务端创建一个接收心跳数据包,并返回心跳响应数据包的处理器。

然后我们为客户端也添加一个IMIdleStateHandler处理器,跟服务端用同一个即可,15秒读取不到服务端心跳相应数据,则判定服务端假死,客户端也关闭连接,释放资源。

以上就是关于Netty中如何做心跳及空闲检测的方式,希望这些netty的笔记能够帮到大家。

Netty 心跳与空闲监测相关推荐

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

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

  2. Netty -Netty心跳检测机制案例,Netty通过WebSocket编程实现服务器和客户端长链接

    Netty心跳检测机制案例 案例要求 编写一个Netty心跳检测机制案例,当服务器超过3秒没有读时,就提示读空闲 当服务器超过5秒没有写操作时,提示写空闲 服务器超过7秒没有读或者写操作时,就提示读写 ...

  3. Netty(八) Netty心跳检测机制

    1.什么是长链接和短链接 在HTTP/1.0中默认使用短连接.也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接.当客户端浏览器访问的某个HTML或其他类型的Web页中 ...

  4. Netty心跳检测机制

    一.Netty心跳检测机制 心跳:即在 TCP 长连接中,客户端和服务器之间定期发送的一种特殊的数据包,通知对方自己还在线,以确保 TCP 连接的有效性. 在 Netty 中,实现心跳机制的关键是 I ...

  5. Netty 心跳检测机制

    心跳检测机制 目的:就是用于检测 检测通信对方是否还"在线",如果已经断开,就要释放资源 或者 尝试重连. 大概的实现原理就是:在服务器和客户端之间一定时间内没有数据交互时, 即处 ...

  6. 视频教程-物联网之java实现(springboot + netty + 心跳,附完整源码)-Java

    物联网之java实现(springboot + netty + 心跳,附完整源码) 10年的软件行业从业经验,熟悉java开发.java 架构.微服务.自动化高级运维.压力测试等. 林忠明 ¥200. ...

  7. springboot心跳检测_springboot结合netty+心跳机制

    springboot结合netty+心跳机制 netty简介(by 百度百科)Netty是由JBOSS提供的一个java开源框架,现为 Github上的独立项目.Netty提供异步的.事件驱动的网络应 ...

  8. java - (二)netty 心跳监测机制

    1.心跳检测机制 1.1 定时断线重连 客户端断线重连机制 客户端数量多,且需要传递的数据量级较大.可以在周期性的发送数据的时候,使用.要求对数据的即时性不高的时候,才可使用. 优点:可以使用数据缓存 ...

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

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

最新文章

  1. git cherry-pick 把提交到A分支的部分commit 再提交到B分支上
  2. 一个好用的Chrome倒数计时器扩展 - Calendar and Countdown
  3. cmake 构建路径_新手必备:win10 系统下 VSCode+CMake+Clang+GCC 环境的搭建
  4. 网站大流量高并发访问的处理解决办法
  5. iOS中事件的传递和响应者链条
  6. Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
  7. ViewStub延迟加载
  8. vivo怎么设置默认桌面_vivoz3怎样设置默认桌面?
  9. 微软输入法繁体简体切换
  10. php 占比图,深度|丹尼·格林和克莱·汤普森,两位顶级3D差距在哪里?
  11. vue中 给v-for渲染的元素动态添加移除类名
  12. GIF 斗图警告!GitHub 标星 5.5k+,Sorry 会编程就是可以 为所欲为!
  13. 全网最通俗易懂的 Self-Attention自注意力机制 讲解
  14. CodeForces PYM101158CSU2294 Hidden Anagrams 26进制 前缀和
  15. 序列搜索/启动子分析/同源建模(转)
  16. 利用snpEff对基因型VCF文件进行变异注释的详细方法
  17. 快衰落,慢衰落,大尺度衰落,小尺度衰落的关系
  18. 企业上云之服务器硬件篇(五)
  19. Firebird嵌入版本的使用方法
  20. nginx解决内外网隔离无法访问外网web地址问题

热门文章

  1. 计算机键盘指示灯不亮也不启动不了,键盘上指示灯也不亮,怎么按都没反应,是怎么回事啊?...
  2. 2023年大火的 7 款知识管理工具!
  3. HEVC之NALU格式
  4. WuThreat 身份安全云-IAM和ITDR的完美结合,创造一个真正的身份安全云
  5. 软件测试提测是怎样提的,软件测试质量保障之开发提测
  6. 大数据再出发-03hadoop入门
  7. 日本人收了ARM天也不会塌 苹果可以转战MIPS
  8. jQuery实例:图片展示效果
  9. 2009年全国高考0分作文集
  10. golang 迭代器模式