WebSocket

简要介绍

websocket是一种建立浏览器持久连接的一种方式,无跨源限制,建立webscoket连接开始需要通过http来升级通信协议到websocket。

websocket前端代码

const socket = new WebSocket("wss://xxx");
//连接已建立
socket.onopen = function(e) {
  // 通过socket.send来发送数据,WebSocket 通信由 “frames”(即数据片段)组成,可以传输文本数据和二进制数据。
  socket.send("My name is YangNan");
};
//接收到数据
socket.onmessage = function(event) {
  // 接收服务端消息
};
//连接已关闭
socket.onclose = function(event) {
   // 如果连接正常关闭wasClean则为 true,否则为 false。
  if (event.wasClean) {
  } else {
    // 例如服务器进程被杀死或网络中断
    // 在这种情况下,event.code 通常为 1006
  }
};
// Websocket错误
socket.onerror = function(error) {

};
// 通过该方法来进行关闭,常见错误码1000 —— 默认,正常关闭(如果没有指明 code 时使用它),小于1000的码被保留,设置时会出错
socket.close([code], [reason]); 

其他属性

  1. socket.bufferedAmount 属性储存了目前已缓冲的字节数,检查它以查看 socket 是否真的可立即用于传输。
  2. socket.readyState获取连接当前的状态
  • 0 —— “CONNECTING”:连接还未建立,
  • 1 —— “OPEN”:通信中,
  • 2 —— “CLOSING”:连接关闭中,
  • 3 —— “CLOSED”:连接已关闭。

websocket超时重连的心跳检测

class WebSocketWithHeartbeat {
   constructor(url) {
       this.url = url;
       this.pingInterval = 5000; // 5秒发送一次ping
       this.pongTimeout = 3000; // 3秒未收到pong判定超时
       this.connect();
   }
   connect() {
       this.ws = new WebSocket(this.url);
       this.ws.onopen = () => this.startHeartbeat();
       this.ws.onmessage = e => {
           if (e.data === 'pong') clearTimeout(this.pongTimer);
       };
       this.ws.onclose = () => this.reconnect();
   }
   startHeartbeat() {
       this.pingTimer = setInterval(() => {
           this.ws.send('ping');
           this.pongTimer = setTimeout(() => this.handleTimeout(), this.pongTimeout);
       }, this.pingInterval);
   }
   handleTimeout() {
       console.log('心跳超时,重连中...');
       this.ws.close();
   }
   reconnect() {
       clearInterval(this.pingTimer);
       setTimeout(() => this.connect(), 5000);
   }
}

引用链接:现代javascript

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 在 WebSock...
    零一间阅读 13,596评论 1 6
  • WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-dup...
    小三哥_e3f4阅读 283评论 0 0
  • 概述 WebSocket 是什么? WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。 ...
    静默虚空阅读 5,959评论 1 22
  • Socket并非是一个协议,而是为了方便使用TCP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。换句话...
    JunChow520阅读 3,525评论 0 4
  • 原文连接:https://juejin.im/entry/5918fc42128fe1005ccbeffb Web...
    Kepler_明阅读 1,208评论 0 0

友情链接更多精彩内容