当前位置:首页 > 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实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…

js 多选 实现

js 多选 实现

实现多选的 JavaScript 方法 使用复选框(Checkbox)实现多选 通过 HTML 的 checkbox 元素配合 JavaScript 实现多选功能。用户可以选择多个选项,提交时获取所有…