当前位置: 首页 > news >正文

WebSocket 核心 API 速查表

本速查表基于 WebSocket 协议规范及前端实践场景整理,涵盖核心对象属性、方法、事件回调及错误处理方案,适用于日常开发查阅。

一、WebSocket 核心对象与初始化

1. 核心对象

WebSocket:浏览器内置构造函数,用于创建 WebSocket 连接实例,是所有操作的基础。

2. 初始化语法

// 基础语法:ws(非加密)或 wss(加密,类似 HTTPS)
const socket = new WebSocket('ws://example.com'); 
// 加密连接示例(生产环境推荐)
const secureSocket = new WebSocket('wss://example.com'); 
  • 参数说明:URL 必须以 ws://wss:// 开头,指向支持 WebSocket 协议的服务器地址。

二、WebSocket 核心属性

属性名类型说明
readyState数字连接状态码:
0 - CONNECTING(连接中)
1 - OPEN(连接已打开)
2 - CLOSING(关闭中)
3 - CLOSED(已关闭)
bufferedAmount数字已发送但未被服务器确认的字节数,用于判断发送缓冲区是否已满
protocol字符串实际使用的子协议(若初始化时指定多个协议,返回服务器选中的协议)
url字符串创建连接时使用的 URL(只读)

三、WebSocket 核心方法

方法名语法说明
send()socket.send(data)向服务器发送数据,data 支持字符串、Blob、ArrayBuffer 类型;
注意:连接未打开(readyState!==1)时调用会报错
close()socket.close(code, reason)主动关闭连接;
code(可选):关闭状态码(默认 1005,代表无状态码);
reason(可选):字符串,描述关闭原因

四、WebSocket 核心事件回调

WebSocket 通过“事件驱动”处理连接生命周期,需通过绑定回调函数响应各类状态变化。

事件名绑定方式触发场景
opensocket.onopen = () => {}连接成功建立时触发(readyState 变为 1)
messagesocket.onmessage = (event) => {}收到服务器发送的数据时触发;
通过 event.data 获取数据(自动解析为字符串/Blob)
errorsocket.onerror = (error) => {}连接发生错误时触发(如握手失败、网络中断);
注意:错误后连接可能自动关闭
closesocket.onclose = (event) => {}连接关闭时触发(主动关闭或被动关闭);
通过 event.code 获取关闭状态码,event.reason 获取关闭原因

五、常见错误与解决方案

错误类型可能原因解决方案
浏览器不支持 WebSocket使用 IE8 及以下等旧浏览器检测 typeof WebSocket !== 'function',提示用户更换 Chrome/Firefox 等现代浏览器
握手失败(handshake error)URL 格式错误、服务器未支持 WebSocket1. 检查 URL 前缀是否为 ws:///wss://
2. 确认服务器已开启 WebSocket 服务
连接意外关闭(connection closed)网络波动、服务器重启、长时间无数据传输onclose 中添加重连逻辑(排除主动关闭场景),结合心跳机制维持连接
发送数据失败连接未打开(readyState!==1)、数据格式错误1. 发送前检查 readyState
2. 确保数据为字符串/Blob/ArrayBuffer 类型
连接超时(timeout)网络延迟高、服务器超时策略实现 Ping/Pong 心跳机制(每 30s 发送 Ping 帧),避免连接被服务器主动断开

六、关键状态码说明

WebSocket 定义了标准化状态码,用于标识连接关闭原因,开发中可通过 event.code 获取:

状态码含义场景示例
1000正常关闭客户端/服务器主动调用 close() 关闭连接
1001端点离开客户端页面关闭、服务器下线
1002协议错误数据格式不符合 WebSocket 协议规范
1003不支持的数据类型发送服务器不支持的数据格式(如二进制数据)
1005无状态码关闭时未指定状态码(默认值)
1006异常关闭网络中断、连接意外断开(无明确原因)

七、实战常用工具函数

1. 连接状态检测

// 检查连接是否可发送数据
function isSocketAvailable(socket) {return socket && socket.readyState === WebSocket.OPEN;
}

2. 安全发送数据

// 确保连接打开后再发送数据
function safeSend(socket, data) {if (isSocketAvailable(socket)) {socket.send(typeof data === 'object' ? JSON.stringify(data) : data);} else {console.error('WebSocket 连接未打开,发送失败');}
}

3. 心跳机制实现

// 为 socket 添加心跳(每 30s 发送 Ping,5s 未响应则重连)
function addHeartbeat(socket, reconnectFn) {let heartbeatTimer;let checkTimer;// 发送心跳function sendPing() {if (isSocketAvailable(socket)) {socket.send(JSON.stringify({ type: 'ping' }));// 等待 Pong 响应checkTimer = setTimeout(() => {socket.close(1006, '心跳无响应');reconnectFn(); // 重连函数}, 5000);}}// 启动心跳heartbeatTimer = setInterval(sendPing, 30000);// 收到 Pong 时清除检查计时器socket.onmessage = (event) => {const data = JSON.parse(event.data);if (data.type === 'pong') {clearTimeout(checkTimer);}};// 关闭时清除计时器socket.onclose = () => {clearInterval(heartbeatTimer);clearTimeout(checkTimer);};
}
http://www.dtcms.com/a/581425.html

相关文章:

  • 多功能电脑PDF转换工具Icecream PDFv3.15 中文绿色便携版
  • 在线ftp传网站文件有空间域名服务器怎么做网站
  • 独立站的优势和劣势和运营技巧
  • 软考 系统架构设计师系列知识点之杂项集萃(192)
  • 在Vagrant 2.4.9中安装Rocky 9和Docker
  • 儿童网站设计百度怎么做自己网站
  • Mysql作业4
  • ComfyUI(8)--- 老照片修复(1)
  • 企业网站的首页网站备案 公司注销吗
  • 网站 功能呢如何制作apple pencil
  • php项目ueditor上传pdf文件,防止XSS攻击
  • 876. 链表的中间结点
  • 排序算法:堆排序、快速排序、归并排序
  • qData 数据中台开源版 v1.0.7 发布:新增 SQL Server 支持,快速部署支持达梦与 MySQL 主库切换!
  • Qt 自定义加载动画控件:带文字提示的等待 spinner 实现
  • 织梦做淘宝客网站视频教程移动互联网开发找工作
  • Vue3 任务管理器(Pinia 练习)
  • 没有域名可以做网站吗个人网页设计绘画作品
  • 百胜软件做客华为云生态直播间:全渠道中台如何赋能零售数字化与全球布局?
  • 航电系统架构演进与要点概述
  • 华为云ELB
  • 医疗智能体(eiHealth) 3.4.0 使用指南(for 华为云Stack 8.5.0) 0. 华为除了这个 还有医疗 和生信方面的 产品
  • 写作教学网站wordpress 管理员账号在哪里查询
  • 完善服务终端:一洽对话结束与异常场景提示语设置
  • 从阿里云大模型服务平台百炼看AI应用集成与实践
  • 【图像处理】图像的基础几何变换
  • uniapp + uni-ui + vue3转cli
  • 户外保险网站wordpress icon 插件
  • config.json 完全指南:项目配置的核心实践
  • 【App开发】ADB 详细使用教程- Android 开发新人指南