从入门到精通:深入理解socket的 heartbeat机制
今天和大家一块学习一下即时通讯中的心跳机制。有一些小伙伴私下问为什么不直接开始上干货。我这边个人感觉是socket是一个比较大,牵扯的知识点比较多,从外围一点一点的了解学习socket,然后完全掌握。
心跳机制
心跳机制的原理很简单:客户端每隔N秒向服务端发送一个心跳消息,服务端收到心跳消息后,回复同样的心跳消息给客户端。如果服务端或客户端在M秒(M>N)内都没有收到包括心跳消息在内的任何消息,即心跳超时,我们就认为目标TCP连接已经断开了。
心跳的作用
通知服务器,客户端存活状态,一旦服务器监测到在某段时间没有收到客户端发来的心跳包,服务器就会释放曾经为此客户端分配的所有资源,例如Socket连接
定时的刷新NAT内外网IP映射表,以便防止NAT路由器移除映射表,导致客户端和服务器端的连接中断户体验。
心跳的实现方案
心跳的方案实现有很多种我这里重点说一下比较有代表性的两种心跳机制。
方案一:服务器主动发送心跳包
服务器建立定时器,定时发送心跳包给到客户端,客户端收到心跳包后,立即发送心跳包给到服务器,服务器收到客户端发来的心跳包后确认客户端的连接可用,不执行释放socket相关的操作。如果服务器端没规定的时间间隔内没有收到客户端响应的心跳包,服务器端就认为客户端的连接不可用,执行释放socket相关的操作。有点是服务器端能够准确的掌握客户端是否在线,缺点是对服务器端性能要求较高。
方案二:客服端主动发送心跳包
客户端定时主动的发送心跳包给到服务器端,服务器端收到心跳包后对相关的socket进行加标识,然后服务器端发送响应心跳包给到客户端。客户端收到心跳包认为连接可用。如果服务器端超过一段时间没有收到心跳包,相关的socket的标识符回进行降权,直至失效,然后服务器端会释放这个socket相关的资源。这个对服务器的性能要求不那么高,我这边由于用手机作为一个server来处理数据的,性能差,所以我这边服务器端接收到客户端发来的心跳包以后,并没有给客户端发响应心跳包,只是做了加标识符的操作。
参考文章:https://blog.****.net/youniworld/article/details/47300019
上一篇: 服务端和客户端心跳包机制
下一篇: 实战WebSocket:深入理解心跳机制
推荐阅读
-
从入门到精通:深入理解socket的 heartbeat机制
-
深入理解Java中的包(package)概念,从入门到精通
-
入门到精通:从理解图优化g2o代码到实战编程——SLAM技术的全程解析(详述)
-
【2022新手指南】Java编程进阶之路 - 六、技术架构篇 ### MySQL索引底层解析与优化实战 - 你会讲解MySQL索引的数据结构吗?性能调优技巧知多少? - Redis深度揭秘:你知道多少?从基础到哨兵、主从复制全梳理 - Redis持久化及哨兵模式详解,还有集群搭建和Leader选举黑箱打开 - Zookeeper是个啥?特性和应用场景大公开 - ZooKeeper集群搭建攻略及 Leader选举、读写一致性、共享锁实现细节 - 探究ZooKeeper中的Leader选举机制及其在分布式环境中的作用 - Zab协议深入剖析:原理、功能与在Zookeeper中的核心地位 - RabbitMQ全方位解读:工作模式、消费限流、可靠投递与配置策略 - 设计者视角:RabbitMQ过期时间、死信队列与延时队列实践指南 - RocketMQ特性和应用场景揭示:理解其精髓与差异化优势 - Kafka详细介绍:特性及广泛应用于实时数据处理的场景解析 - ElasticSearch实力揭秘:特性概述与作为搜索引擎的广泛应用 - MongoDB认知升级:非关系型数据库的优势阐述,安装与使用实战教学 - BIO/NIO/AIO网络模型对比:掌握它们的区别与在网络编程中的实际应用 - Netty带你飞:理解其超快速度背后的秘密,包括线程模型分析 - 网络通信黑科技:Netty编解码原理与常用编解码器的应用,Protostuff实战演示 - 解密Netty粘包与拆包现象,怎样有效应对这一常见问题 - 自定义Netty心跳检测机制,轻松调整检测间隔时间的艺术 - Dubbo轻骑兵介绍:核心特性概览,服务降级实战与其实现益处 - Dubbo三大神器解读:本地存根与本地伪装的实战运用与优势呈现 ----------------------- 七、结语与回顾
-
ES 从单体到集群,从入门到精通,深入的查询过程和近乎实时的分析,看看 ES 为何如此快速!
-
从初级到精通:深入理解网络工程师的QOS核心原理 - 实战操作与经验汇总
-
从网络IP到基本命令ping:深入理解计算机网络连接的入门知识
-
深入探索JMeter配置文件:从入门到精通的进阶篇上篇
-
理解基础的UI界面层级结构:从入门到精通
-
第二章:深入理解Linux编程 - 进程工作原理:剖析进程定义与特性、状态转换、关键数据结构、从创建到结束的过程、睡眠与唤醒机制、暂停与重启操作,以及处理器调度的核心概念