上次我们讲过了websocket断线重连的问题,那么久会有人提出疑问了,心跳包重连跟断线重连有什么区别呢?

其实这两个都是为了达到一个目的,那就是保证当前设备的网络状态保持通畅。。。而断线重连呢,只能保证网络失去连接的时候有效,并不能保证网络断开的时候有效。。。这么说可能就有很多人迷糊了,这两者之间有什么区别呢?

其实很简单哈,至少我是这么理解的。网络失去连接的时候是你手动关闭网络或禁用网络时,这个时候会触发到websocket中的onclose事件,也就是说他会触发断线重连,

而网络断开的时候呢,指的是比较简单粗暴的方法,例如直接拔网线之类的。。。。而这个时候呢是不会触发onclose事件的,那这个时候我们要怎么办呢,我们就需要用到心跳重连了

好啦,说了这么多,现在我们直接来看代码吧。。。。

首先是断线重连,这个我们就不说了,如果没明白的可以去看我写的另外一篇关于断线重连的文章,这里我就不多说了。。。。

那么我们重点来讲一下心跳包重连

if (jsonGotData.hasOwnProperty('id')) {

timestampVal = new Date(jsonGotData.now_time);

heartbeatLive(webSocket, timestampVal);

}

if (jsonGotData.hasOwnProperty('heartbeat')) {

timestampVal = new Date(jsonGotData.heartbeat);

return heartbeatLive(webSocket, timestampVal);

}

这是在onmessage中收到信息时候的处理,那么我们来具体分析

if (jsonGotData.hasOwnProperty('id')) {

timestampVal = new Date(jsonGotData.now_time);

heartbeatLive(webSocket, timestampVal);

}

首先这里我们是判断服务端发送的是不是id字段,这使得我们可以来初始化发送时间

if (jsonGotData.hasOwnProperty('heartbeat')) {

timestampVal = new Date(jsonGotData.heartbeat);

return heartbeatLive(webSocket, timestampVal);

}

然后是判断服务端有没有发送heartbeat字段来判断是不是在心跳周期之内

OK,那么来看具体的心跳函数

heartbeatLive = (function(_this) {

return function(conn, nowTime) {

var nowtime, hbt;

nowtime = new Date();

if ((nowTime.add({

minutes: 1

})).isBefore(androidNowtime)) {

clearTimeout(hbt);

return newConnection();

}

return hbt = setTimeout(function() {

return conn.send('heartbeat');

}, 60000);

};

})(this);

这个心跳函数的功能是怎么样的呢,主要的逻辑是将本地的时间与获取到服务器的心跳时间做一个比较,判断我们的心跳阶段是不是处于一个“健康期”,如果存在的话,那自然是继续正常的心跳啦,那如果不正常的话,我们就要来重连了。。。

而我们用这个心跳重连的方法呢,就可以保证某些傻小白把网线给拔了,都不知道问题出在哪里,这样就可以放心地使用我们的消息推送了,哈哈。。。

来自:http://my.oschina.net/codingBingo/blog/634947

php websocket 心跳包,websocket 心跳包重连相关推荐

  1. 【小程序websocket前后端交互】uniapp写微信小程序聊天功能功能,websocket交互功能,心跳重连【详细注释,复制即用】

    前言 这几天在做的一个需求,就是要写一个小程序端的页面,用于跟客服聊天. 然后就用到了websocket技术,以前我做过网页版的,但是做小程序后发现网页版的逻辑放过来没问题,但是很多的方法和api是不 ...

  2. 微信小程序WebSocket心跳检测与断来重连

    为什么要心跳检测 使用微信小程序WebSocket时,WebSocket在一定的时间没有进行通信就会断开连接,所以需要使用心跳检测. 那么心跳检测是什么呢,心跳检测顾名思义就是和人心脏动一样,客户端在 ...

  3. socket服务器断开消息,详解JS WebSocket断开原因和心跳机制

    1.断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来. ws.onclose = function (e) { console.log('websocket ...

  4. Android心跳包(一)——心跳机制

    转自:http://blog.csdn.net/rabbit_in_android/article/details/50119809 在写之前,我们首先了解一下为什么android维护长连接需要心跳机 ...

  5. springboot心跳检测_springboot websocket 实时刷新 添加心跳机制(亲测可用版)

    思路 在我之前的一篇文章当中写到了websocket的实时刷新,但是有个问题没有解决,就是长时间没有数据的时候,这个连接就会自动断开,然后再次进行连接的话,需要再次进行连接.如果加入心跳机制的话,10 ...

  6. java udp心跳机制,Socket心跳包机制总结

    跳包之所以叫心跳包是因为:它像心跳一样每隔固定时间发一次,以此来告诉服务器,这个客户端还活着.事实上这是为了保持长连接,至于这个包的内容,是没有什么特别规定的,不过一般都是很小的包,或者只包含包头的一 ...

  7. websocket是否需要处理粘包半包问题分析

    结论: ​ 不需要. 背景: ​ 公司通信涉及到websocket相关,我们都知道websocket是基于tcp的,而tcp是面向字节流的,是需要处理粘包半包问题的.那么websocket是否需要处理 ...

  8. 心跳包间隔多少时间合适_多路SOCKET、心跳包、注册包的作用

    很多人在使用数传电台.模块等产品时,产品手册上面会有多路SOCKET连接.网络心跳包.注册包.串口心跳包等字样,那么这些功能有什么作用呢? 1.多路SOCKET连接 每一路socket都能够单独与不同 ...

  9. (一)串口通信:同步通信与异步通信的区别;异步通信:握手、收发过程、心跳包、定时器、粘包、拆包、丢包、误包(或误码)、帧结构、奇偶校验、CRC校验等等

    目录 第一章.简介 第二章.并行通信 第三章.串行通信 3.1.同步通信 3.1.1.同步通信的原理 3.1.2.同步通信的数据格式 3.1.3.同步通信特点 3.2.异步通信 3.2.1.异步通信的 ...

  10. java udp心跳机制_心跳包机制整理汇总

    [背景] 现需要实现这样的功能:有多个客户端连着同一个服务器.服务器和客户端之间需要"互相"知道彼此的连接状态.比如在某一时刻,服务器需要知道当前有多少个客户端正在和其通信:某一个 ...

最新文章

  1. 深度学习每层的通道数如何计算_深度学习基础系列(一)| 一文看懂用kersa构建模型的各层含义(掌握输出尺寸和可训练参数数量的计算方法)...
  2. A. 本地DNS服务器的位置
  3. 对话框找不到WM_ERASEBKGND消息的解决方法与对话框背景图片的载入方法
  4. asterisk1.8 Makefile分析 (1)
  5. [转]该学Java或.NET?
  6. Linux系统性能查询命令
  7. SVG 教程 (六)SVG 阴影,SVG 渐变 - 线性,SVG 渐变- 放射性
  8. 标准日本语 05_003
  9. Android OpenGL ES 应用(二) 纹理
  10. alsa 放的声音和录制的声音之间的延时_webrtc视频录制总结
  11. OpenCV图像处理--EasyPR中文开源车牌识别系统
  12. 浏览器的“心脏”——内核
  13. 现代投资组合理论python实现
  14. 巨潮资讯网-多层次资本市场信息披露平台
  15. Android Scroll实现弹性滑动 一 列表下拉弹性滑动
  16. 国庆节想吃想玩要不去这? 央视推荐——新疆独库公路
  17. 四维超混沌系统matlab
  18. 微信小程序开发之——用户登录-搭建开发者服务器(2)
  19. 基于SVM支持向量机的车牌分割识别算法matlab仿真
  20. 返利机器人源码php,RebateBot:非常棒的返利机器人 基于 golang+vue+android-xposed

热门文章

  1. 波分复用和频分复用计算机,11. 波分复用:80路以上频分复用,从2.5到20Gb每秒...
  2. 操作系统之进程调度——优先权法和轮转法(附上样例讲解)
  3. Jenkins持续集成环境之Maven的安装和配置
  4. Java-Web JSP、Cookie和Session域对象
  5. vue + element 顶部二级菜单_揭秘vue/react组件库中5个quot;作者不造的轮子quot;
  6. 二叉树的前序、中序和后序遍历介绍及案例
  7. max格式转obj小工具_PDF文件转JPG等图片格式的小工具
  8. 30 个 Redis 基础知识
  9. 路易斯安那州立大学计算机科学,西北路易斯安那州立大学
  10. oracle数据连接java,java是与Oracle数据连接(jdbc)