当前位置:首页 > JavaScript

js 实现 websocket

2026-02-02 09:57:04JavaScript

WebSocket 基本实现

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。JavaScript 提供了 WebSocket API,可以轻松实现客户端与服务器的实时通信。

创建 WebSocket 连接

const socket = new WebSocket('ws://example.com/socket');

监听连接事件

socket.onopen = function(event) {
  console.log('连接已建立');
};

socket.onmessage = function(event) {
  console.log('收到消息: ' + event.data);
};

socket.onclose = function(event) {
  console.log('连接已关闭');
};

socket.onerror = function(error) {
  console.log('发生错误: ' + error);
};

发送和接收数据

发送数据

socket.send('Hello Server!');

接收数据

js 实现 websocket

socket.onmessage = function(event) {
  const data = event.data;
  console.log('接收到数据:', data);
};

关闭连接

手动关闭连接

socket.close();

监听关闭事件

socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`连接正常关闭,code=${event.code} reason=${event.reason}`);
  } else {
    console.log('连接意外断开');
  }
};

二进制数据传输

发送二进制数据

js 实现 websocket

const arrayBuffer = new ArrayBuffer(8);
socket.send(arrayBuffer);

接收二进制数据

socket.onmessage = function(event) {
  if (event.data instanceof ArrayBuffer) {
    const buffer = event.data;
    console.log('接收到二进制数据:', buffer);
  }
};

心跳检测

实现心跳机制

let heartbeatInterval;

socket.onopen = function() {
  heartbeatInterval = setInterval(() => {
    if (socket.readyState === WebSocket.OPEN) {
      socket.send('ping');
    }
  }, 30000);
};

socket.onclose = function() {
  clearInterval(heartbeatInterval);
};

重连机制

自动重连实现

let reconnectAttempts = 0;
const maxReconnectAttempts = 5;

function connect() {
  const socket = new WebSocket('ws://example.com/socket');

  socket.onclose = function() {
    if (reconnectAttempts < maxReconnectAttempts) {
      reconnectAttempts++;
      setTimeout(connect, 1000 * reconnectAttempts);
    }
  };
}

connect();

安全注意事项

  • 始终使用 wss:// 协议而不是 ws:// 来确保加密通信
  • 验证服务器返回的数据,防止注入攻击
  • 实现适当的错误处理和重连逻辑

浏览器兼容性

现代浏览器都支持 WebSocket API,包括:

  • Chrome 16+
  • Firefox 11+
  • Safari 6+
  • Edge 12+
  • Opera 12.1+

对于旧版浏览器,可以考虑使用 Socket.io 等库提供回退方案。

标签: jswebsocket
分享给朋友:

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…