前言

在写这篇文章之前,我曾对HeartBeat做过诸多的研究,也做过诸多的项目,在这些项目中,有客户端为了维持状态,而定时向服务端发送的HeartBeat;有服务端为了维持客户端连接状态而处理HeartBeat等,但是怎么说,无外乎两种状态,HeartBeat要么存在于客户端,要么存在于服务端,其本身具有无状态性,不和数据库进行任何交互,上一条HeartBeat和下一条HeartBeat无特别的必然联系。

那么,HeartBeat究竟是什么,有什么表现形式呢?

首先,HeartBeat从字面意思上解释,就是心跳,心跳都是有一定规律的,比如说,3秒跳一次,5秒跳一次,甚至60秒跳一次等。所以说,HeartBeat的基本单位一般都是以秒来计数的。并且两次HeartBeat间隔的时间不能过长,如果间隔时间过长,比如说两三个小时跳一次,那么HeartBeat也就失去了它本来的意义了,至于原因的话,我方后面讲。它在程序中,主要是为了检测状态的,比如在客户端,连接到服务端后,每隔10秒钟会上传一次心跳包,服务端接收到此心跳包,就会拆包分析,然后重置客户端的心跳计数,如果连续3次,或者4次没有收到客户端传来的心跳包,那么就视为客户端掉线。有人可能就说了,客户端下线的时候,直接向服务端发送一个下线通知不就行了,还用什么心跳包来检测掉线呢? 其实不然,客户端的掉线,是有多种情况的,每个用户不一定都会发送掉线通知,比如他们家里停电了,或者电脑重启了,或者浏览器崩溃了等等,这些情况下客户端还没来得及发送掉线通知就挂了,所以增加心跳检测是应对这种掉线的比较好的方式,它有助于让服务器保存活动的客户端连接,去掉死链,从而提升性能,规避风险。

上面的这种方式,我们可以用下图的流程来表示:

其次,就是HeartBeat的表现方式,在不同人的程序里面,是不同的,但是肯定相同的地方在于,他们都会有心跳标识符的。比如我这里规定和服务端的通讯协议:  信息头|功能码|数据部分|CRC ,其中功能码 006就代表心跳包。那么在客户端我就会这样封包: dst|006|datadata|0013 然后发送给服务端,服务端收到信息后,先进行CRC校验以便确定信息的正确和完整性,然后通过拆包得知客户端传来的是心跳包,那么就会将对应的客户端里面的心跳计数重置即可。其实就是这么简单。

这只是比较普通一些的心跳,对于不同的业务系统来说,可能会有不同的表现形式,比如对咱们RSA系统来说,如果要想重构这种心跳包,需要为不同的activity类型规定不同的心跳包,比如对于按钮点击,我们可以专门定义一个按钮点击心跳包;对于拖拽,我们可以定义一个拖拽心跳包等,服务端接收以后,能够处理。并且这种心跳包的传输是基于socket传输的,而不是目前的借助于数据库,在性能上和多样性方面,更加的高效。之所以RSA在以前没有采用这种方式,应该是当时还没有websocket吧。

最后我们需要说到的一个问题就是HeartBeat频繁的发送会不会在业务拥塞的时候,造成性能问题。针对这种场景,已经有了适合的解决方案,那就是在业务场景拥挤的时候,我们只需要将HeartBeat的发送和处理放到其他线程上即可,并且改变HeartBeat的发送时长,比如从原来的十秒,改成现在的三十秒,这样就能在很大程度上提高性能;当业务不拥塞的时候,我们就可以把HeartBeat的发送和处理放到业务线程上,并适当减少HeartBeat的发送时间,也都是可取的。这种配置如果做成可自动切换的,就更好了。

实际例子

我们讲了这么多,接下来看看例子。这个是我写的一个小DEMO,用HeartBeat来检测聊天用户的掉线问题。

基于SignalR的小型IM系统

物联网平台设计心得:管中窥豹之HeartBeat的更多相关文章

  1. 物联网平台设计心得:你所不知道的CRC校验

    在物联网平台设计过程中,我的中间件一方面需要处理来自于硬件端的包,另一方面需要处理来自于用户端的包,用户端包括web端和手机端等等.所以编写一个统一的CRC认证是非常必须要. 那么,在设计开始,CRC ...

  2. 物联网平台设计心得:DateTimePicker实现选择联动

    所谓的选择联动,就是指,当我DateTimePicker1选择2月4号的时候,我DateTimePicker2只能选择2月4号和2月5号两天,当然你可以自行规定要选择的日期.这在一些图表查询条件里面是 ...

  3. 国内首篇介绍JanOS物联网操作系统的文章 - 如何把你的手机主板打造成物联网平台

    天地会珠海分舵注:如无意外,您现在正在看的将是国内首篇且是唯一一篇介绍炙手可热的物联网的操作系统JanOS的文章!不信你去百度!希望大家能喜欢.但本文只是引言,更多信息请还是访问JanOS的官网:ht ...

  4. 阿里云物联网平台体验(树莓派+Python篇)

    阿里云物联网平台体验(树莓派+Python篇) 虽然对阿里云物联网平台比较熟悉了,从一开始就有幸参与了飞凤平台(Link Develop 一站式开发平台的前身)的一些偏硬件接入的工作.但是同时也见证了 ...

  5. 读懂SAP Leonardo物联网平台

    读懂SAP Leonardo物联网平台 https://blog.csdn.net/weixin_42137700/article/details/81903290 本文比较系统.全面地介绍了SAP ...

  6. 如何实现PLC与THINGWORX工业物联网平台对接

    物联网(Internet of Things),简称 IoT,对于制造商来说,是行业乃至世界范围内的一股变革浪潮.在我们设计和制造的产品中,将会不断嵌入各种软件.传感器和启用 IP 的连接功能.IDC ...

  7. 国外物联网平台(8):Telit

    国外物联网平台(8) ——Telit 马智 定位 We Bring IoT to Life Telit提供世界上最全面的高性能物联网模块.连接服务和软件. 产品体系 模块 Telit提供丰富专业的物联 ...

  8. 国外物联网平台(7):FogHorn

    国外物联网平台(7) ——FogHorn 马智 引言: 据外媒在本月20日报道,硅谷初创公司FogHorn正在与谷歌合作以简化工业物联网应用的部署.本文对FogHorn的技术.产品.应用和生态进行了分 ...

  9. 国外物联网平台(6):Electric Imp

    国外物联网平台(6)——Electric Imp 马智 公司背景 Electric Imp成立于2011年,公司设立在美国加利福尼亚州洛斯阿尔托斯和英国剑桥 公司投资者包括:富士康技术集团.PTI创投 ...

随机推荐

  1. 【新年呈献】高性能 Socket 组件 HP-Socket v3.1.2 正式发布

    HP-Socket 是一套通用的高性能 Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP ...

  2. 两种文件上传的实现-Ajax和form+iframe

    前言 话说现在很多很多项目需要用到文件上传,自从有了HTML5之后,上传就变的超级简单了.HTML5支持多图片上传,而且支持ajax上传,而且支持上传之前图片的预览,而且支持图片拖拽上传,而且还是纯粹 ...

  3. 1-2 nodejs小节 文件读取

    1.表达式 在命令行输入  node回车后,可以在后边输入相应的表达式,进行运算操作   2.阻塞文件读取 var data=fs.readFileSync('input.txt', 'utf-8') ...

  4. centos 6.0用yum安装中文输入法

    Centos6.2代码 CentOS 6.0没有默认没有装语言支持(Language Support),因此很不方面. 终于发现了有效的方法: su root yum install "@C ...

  5. MyEclipse使用心得:集成和使用Maven的方法

    MyEclipse下载:http://www.myeclipsecn.com/download/ 第一步:下载和安装 1.官网下载Maven:http://maven.apache.org/downl ...

  6. Windows 双网卡指定网络出口

    主要命令: ipconfig route ping tracert     指定外网路由通过本地以太网连接出去 route add -p 0.0.0.0 mask 0.0.0.0 192.168.10 ...

  7. yii2下拉框带搜索功能

    简单的小功能,但是用起来还是蛮爽的.分享出来让更多的人有更快的开发效率,开开心心快乐编程.作者:白狼 出处:http://www.manks.top/yii2_dropdown_search.html ...

  8. Linux查看关机时间

    在Linux系统中,如何查看系统什么时候执行了shutdown命令关闭服务器了呢? 方法1:使用 last -x|grep shutdown 查看shutdown的历史记录 [root@mylnx20 ...

  9. SQL Server高级查询

    简介 关于数据库,我们经常会听说"增查删改"之类的词语,听起来很简单,但是如果想要准确的获取到需要的数据的话,还是要花点功夫的.下面由我来和大家谈谈高级查询的用法以及和普通查询的区 ...

  10. 测试几个xml的问题

    使用sql server的时候,免不了与xml的参数打交道,xml大多数时候都给我们的程序带来方便,但是也有些时候会有变量赋值不通过的时候.(当然罗,如果你本身xml都通不过 xml spy 之类软件 ...