Websocket
WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通信的协议。它使得客户端和服务器之间可以随时互相推送数据,而不需要像 HTTP 那样每次都由客户端发起请求。
与 HTTP 的区别:
- HTTP 是单向的(客户端请求-服务器响应),WebSocket 是双向的(全双工)。
- HTTP 每次请求需要携带完整的头部,WebSocket 建立连接后数据帧头部开销很小(最小 2 字节)。
- HTTP/1.1 虽然支持 Keep-Alive 复用连接,但仍需客户端发起请求;WebSocket 连接建立后服务器可主动推送。
握手过程:
- 客户端发送 HTTP 请求,带
Upgrade: websocket、Connection: Upgrade、Sec-WebSocket-Key等头部。 - 服务器返回
101 Switching Protocols,并带上Sec-WebSocket-Accept(由 Key 加固定 GUID 后做 SHA-1 再 Base64 得到)。 - 握手成功后,双方通过 WebSocket 数据帧进行通信。
基本用法:
const ws = new WebSocket("ws://localhost:8080/socket");
ws.onopen = () => ws.send("hello server");
ws.onmessage = (e) => console.log("收到:", e.data);
ws.onerror = (err) => console.log("错误:", err);
ws.onclose = () => console.log("连接关闭");
// 主动关闭
ws.close();
适用场景: 实时聊天、在线协作、股票行情推送、多人在线游戏等需要服务器主动推送数据的场景。