跳到主要内容

Websocket

WebSocket 是 HTML5 提供的一种在单个 TCP 连接上进行全双工通信的协议。它使得客户端和服务器之间可以随时互相推送数据,而不需要像 HTTP 那样每次都由客户端发起请求。

与 HTTP 的区别:

  • HTTP 是单向的(客户端请求-服务器响应),WebSocket 是双向的(全双工)。
  • HTTP 每次请求需要携带完整的头部,WebSocket 建立连接后数据帧头部开销很小(最小 2 字节)。
  • HTTP/1.1 虽然支持 Keep-Alive 复用连接,但仍需客户端发起请求;WebSocket 连接建立后服务器可主动推送。

握手过程:

  1. 客户端发送 HTTP 请求,带 Upgrade: websocketConnection: UpgradeSec-WebSocket-Key 等头部。
  2. 服务器返回 101 Switching Protocols,并带上 Sec-WebSocket-Accept(由 Key 加固定 GUID 后做 SHA-1 再 Base64 得到)。
  3. 握手成功后,双方通过 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();

适用场景: 实时聊天、在线协作、股票行情推送、多人在线游戏等需要服务器主动推送数据的场景。