当前位置:首页 > 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方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

js 实现vue模板

js 实现vue模板

实现 Vue 模板的 JavaScript 方法 通过原生 JavaScript 可以实现类似 Vue 的模板渲染功能,主要包括数据绑定、指令处理和模板解析。以下是核心实现思路: 数据绑定与响应式…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js 实现倒计时

js 实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是两种常见实现方式。 使用 setInterval 实…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('imag…