WebSocket 是一种网络通信协议,属于 HTML5 规范的一部分。它提供了在单个长期连接上进行全双工通信的能力,使得数据可以从客户端发送到服务器,也可以从服务器发送到客户端,这与传统的 HTTP 请求和响应模型不同。
WebSocket 协议定义在 RFC 6455 中,其主要特点包括:
-
持久连接:一旦建立了 WebSocket 连接,该连接将保持打开状态,直到客户端或服务器决定关闭连接。这消除了需要不断重连的需求,并减少了延迟。
-
全双工通信:WebSocket 连接允许数据在两个方向上同时流动,使得实时通信变得更加高效。
-
小开销:与 HTTP 协议相比,WebSocket 在传输数据时的开销更小,因为它使用了更简单的帧来传输数据,而不是完整的 HTTP 请求和响应。
-
兼容性:WebSocket 是设计来与 HTTP 协议兼容的,它在默认端口 80 和 443 上使用 HTTP 和 HTTPS 协议,并通过 HTTP 升级头来升级现有的 HTTP 连接到 WebSocket 连接。
-
二进制或文本数据:WebSocket 可以传输文本数据(如 UTF-8 编码的字符串)或二进制数据(如 Blob 或 ArrayBuffer)。
WebSocket 协议开始于一个 HTTP 请求,包含一个 "Upgrade" 头,请求服务器升级到 WebSocket 连接。如果服务器支持 WebSocket,它会以一个 HTTP 101 状态码(Switching Protocols)响应,并切换到 WebSocket 协议进行通信。一旦握手完成,数据就可以在客户端和服务器之间以帧的形式双向传输。
WebSocket 协议非常适合需要频繁或实时交互的应用,如在线游戏、聊天应用和交互式网页等。