WebSocket 学习笔记

来自我的博客

因为项目原因需要用到双工通信,所以比较详细的学习了一下浏览器端支持的 WebSocket.
并记录一些遇到的问题。

简介

WebSocket 一般是指浏览器提供的 API 接口,允许 Web 页面通过 WebSocket 协议与远程主机进行双向通信。

注:本接口不允许到底层网络的原始访问。举例说明,本接口不能被用于实现一个不通过自定义服务器代理发送消息的 IRC(网间实时聊天,Internet Relay Chat)客户端。

接口说明 文档

WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。

常见问题

1.基于 WebSocket 心跳功能

因为 WebSocket 本身不提供心跳功能,所以在有些时候无法及时正确的判断与后端的连接状态,很多时候就需要自己来进行实现。可以通过与后端约定定时握手的形式来实现心跳功能。比如说每 30 秒通信一次。

/** WebSocket 心跳 **/

const msg = "heatbeat"; // 约定的心跳消息
let timer = null; // 定时器
let lastMsgTimestamp = null; // 时间戳
let ws = new WebSocket(""); // ws 实例

ws.onopen = e => {
  // 更新时间戳
  lastMsgTimestamp = new Date().getTime();

  if (e.type === "open") {
    // 创建心跳连接
    if (timer) {
      clearInterval(timer);
    }
    timer = setInterval(heatbeat, 10000);
  }
};

function heatbeat() {
  if (ws) {
    if (new Date().getTime() - lastMsgTimestamp > 300000) {
      clearInterval(timer);
      console.log("心跳已断开");
      // ... 心跳断开后的处理
    } else {
      // 发送约定的心跳
      ws.send(msg);
    }
  }
}

/** 记得关闭连接时清楚定时器 **/

TODO 通信中断重连问题

最新文章

  1. windows系统下fis3安装教程
  2. HTML5移动Web开发(四)——移动设计
  3. C语言的结构体和C++结构体的区别
  4. Xpath用法
  5. 9月5日网页基础知识 通用标签、属性(body属性、路径、格式控制) 通用标签(有序列表、无序列表、常用标签)(补)
  6. 【leetcode】Regular Expression Matching (hard) ★
  7. windows下使用体验更好的控制台——ConsoleZ
  8. java语言实现的短信接入实例,各公司大同小异
  9. 也谈LBP
  10. app开发版面设计原则
  11. Lotus 迁移到Exchange 2010 之准备使用Transport 同步Lotus 相关信息!
  12. uri编解码
  13. Java nextInt()函数
  14. [LeetCode] Interleaving String [30]
  15. Oracle EBS-SQL (PO-14):检查供应商信息sql
  16. rem vh vw vmin vmax ex ch
  17. adodb.RecordSet的属性和方法
  18. jQuery源码逐行分析学习02(第一部分:jQuery的一些变量和函数)
  19. docker与虚拟机有何不同
  20. 工艺CODE

热门文章

  1. Unity3D NGUI UIPlayTween(原UIButtonTween)动画事件详解
  2. P1648 看守
  3. 二分优化的lis
  4. 前端开发常用cmd命令
  5. hdu3938 Portal 离线+并查集
  6. Flexbox布局的基本概念
  7. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C
  8. 生产环境中配置的samba
  9. Nagios安装与部署
  10. Centos 6.5安装MySQL-Python遇到的问题--解决办法一