WebSocket通过HTTP升级握手建立持久全双工连接:客户端发含Upgrade、Sec-WebSocket-Key的请求,服务器返回101状态及Sec-WebSocket-Accept校验;连接后通过onopen/onmessage/onclose/onerror事件收发数据,以帧而非HTTP报文传输,支持文本、二进制、Ping/Pong;需用wss://加密,服务器需校验Origin,原生无自动重连。
WebSocket 在 JavaScript 中通过一次 HTTP 握手建立持久、全双工的 TCP 连接,之后客户端和服务器可随时互发数据,无需重复请求。
浏览器发起一个带特殊头的 HTTP 请求:
Sec-WebSocket-Accept —— 由客户端密钥经固定算法计算得出,供客户端校验握手成功,连接就脱离 HTTP,进入 WebSocket 帧通信模式。
JS 使用 WebSocket 构造函数创建实例,并绑定关键事件:
socket.send() 发送首条消息event.data 是字符串或 ArrayBufferevent.code 和 event.reason 可辅助诊断所有数据都封装成 WebSocket 帧传输,不是 HTTP 报文:
ArrayBuffer 或 Blob
实际使用中需注意几个关键点:
onclose 后延时重建 new WebSocket(url)
socket.readyState === WebSocket.OPEN,避免报错基本上就这些。