websocket

‌1、含义

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议‌,允许客户端与服务器之间建立持久连接,实现低延迟、高效率的双向数据传输。解决了传统 HTTP 只能客户端主动请求的问题

2、核心特点

‌全双工通信‌:客户端和服务器可同时主动发送数据,无需等待对方响应

‌持久连接‌:握手成功后连接保持打开,避免频繁建立/断开 TCP 连接的开销

‌轻量级头部‌:相比 HTTP 每次请求携带完整头部,WebSocket 数据帧头部很小仅 2--10 字节(客户端到服务器额外加 4 字节掩码)‌

基于 TCP,兼容 HTTP‌:使用 ws://(明文)或 wss://(加密,推荐生产环境)协议,默认复用 HTTP 的 80/443 端口,便于穿透防火墙

广泛浏览器支持‌:所有主流现代浏览器均原生支持 ‌

3、与HTTP的区别

|--------|----------------|------------------|
| 特性 | HTTP | WebSocket |
| 连接方式 | 短连接,请求 - 响应即断开 | 长连接,一直保持 |
| 通信方向 | 只能客户端主动请求 | 双向随时推送 |
| 实时性 | 差(轮询 / 长轮询) | 高 |
| 开销 | 每次请求带大量头信息 | 仅握手时 HTTP 头,后续极小 |
| 适用场景 | 页面、接口、数据查询 | 聊天、直播、通知、大屏、游戏等 |

4、如何使用websocket
javascript 复制代码
// 1. 创建连接
const ws = new WebSocket('ws://localhost:8080'); // 或 wss://... 用于生产环境

// 2. 监听事件
ws.onopen = () => {
  console.log('连接已建立');
  ws.send('Hello Server!'); // 发送消息
};

ws.onmessage = (event) => {
  console.log('收到消息:', event.data);
  // 若服务端发送 JSON,需解析:JSON.parse(event.data)
};

ws.onclose = (event) => {
  console.log('连接关闭,代码:', event.code, '原因:', event.reason);
};

ws.onerror = (error) => {
  console.error('连接异常:', error);
};

// 3. 发送数据(必须为字符串)
ws.send(JSON.stringify({ type: 'login', user: 'alice' }));

// 4. 关闭连接(如页面卸载时)
window.addEventListener('beforeunload', () => {
  ws.close();
});

关键注意事项‌:

send() 只能传 ‌字符串‌,对象需用 JSON.stringify() 转换

发送前应检查 ws.readyState === WebSocket.OPEN(值为 1),避免在非开放状态发送报错 ‌

页面离开前务必调用 close() 防止连接泄漏 ‌

相关推荐
平头哥~16 分钟前
从文化 IP 解读到伴手礼定制,文创设计师智能体背后是 端到端具身交互智能落地
网络协议·tcp/ip·交互
qq_40999093?29 分钟前
VyOS 入门指南:从概念认知到基础配置
网络
瞬间记忆1 小时前
汽车CAN基础知识
网络
wusam1 小时前
计算机网络第二章习题解答
服务器·网络·计算机网络
制造业的搬运工2 小时前
车载 PCB 打样周期与选型指南:从 IATF 16949 到 IPC-6012 的 5 个硬指标
大数据·网络·人工智能·制造·pcb工艺
bksczm2 小时前
0基础面试2
网络·面试·职场和发展
wdfk_prog2 小时前
Wi-Fi Direct教程 02:从 wpa_cli main() 到 P2P_FIND——用源码注释追踪 CLI 控制命令发送
运维·服务器·网络·网络协议·ubuntu·p2p·wifi-direct
P1Browser2 小时前
换了 IP 还是被关联:WebRTC 泄露本地 IP 的三种触发路径
网络协议·tcp/ip·webrtc
被摘下的星星3 小时前
HTTP 状态码 和 网络端口号
网络·网络协议·http
云边云科技_云网融合3 小时前
生物医疗跨院区影像与诊疗数据传输:高带宽与合规双重目标下的网络搭建指南
网络·科技