跳至正文
中文
立即开始

WebSocket

WebSocket 是一种通信协议,客户端和服务器可通过一条持久连接双向发送实时消息,无需为每次更新新建 HTTP 请求。

文章目录(8 个章节)

WebSocket 如何工作

在常见的 HTTP/1.1 流程中,客户端先发送包含 Upgrade: websocket 的 HTTP 请求。服务器返回 101 Switching Protocols,表示接受升级。

GET /stream HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

收到该响应后,任何一方都能以帧的形式发送文本或二进制消息,无需等待新请求。Ping 和 Pong 帧可用于检查对端是否仍然可达。

连接通常基于 TCP。ws:// URL 不加密,wss:// 则使用 SSL/TLS 保护连接,通常使用 443 端口。

WebSocket 的常见用途

WebSocket 适合需要频繁双向更新的应用:

  • 实时聊天和通知流。
  • 金融数据看板和动态市场数据。
  • 需要交换玩家操作的多人游戏。
  • 同步更改的协作编辑器。

普通网页或只需偶尔进行请求与响应交互的 API 通常不需要 WebSocket。

WebSocket 与 HTTP 对比

HTTP 连接可以复用,但每次常规交互仍由客户端发起。WebSocket 完成初始握手后会改变这种模式。

WebSocket HTTP 请求与响应
连接 通常长时间保持 可供多次交互复用
消息方向 任何一方都可随时发送 通常由客户端发起
适用场景 频繁的实时更新 页面、文件和标准 API
单条消息开销 建立连接后使用小型帧 请求头和响应头

通过代理使用 WebSocket

HTTP 代理服务器 可以传输 WebSocket 流量,但路径上的每个中间节点都必须支持这种连接:

  • 安全连接: 显式代理通常对 wss:// 使用 CONNECT,再通过隧道传输 TLS 和 WebSocket 握手。
  • 升级处理: 反向代理必须正确转发升级请求,否则服务器可能始终不会返回 101。
  • 认证: 代理凭据无效时,客户端可能会先收到 407 响应,WebSocket 连接因而无法到达目标服务器。
  • 空闲超时: 连接长时间没有活动时,代理、防火墙和负载均衡器可能会将其关闭。

对于已经建立的 WebSocket 连接,轮换代理不会在消息传输期间更换出口 IP。通常只有建立新连接时才会轮换。应用要求客户端地址保持一致时,粘性会话 可让重新连接继续使用同一出口 IP。

常见问题

WebSocket 是基于 HTTP 的吗?

在常见的 HTTP/1.1 流程中,只有建立连接时使用 HTTP。收到 101 响应后,连接传输的是 WebSocket 帧,而不是普通的 HTTP 请求和响应。

WebSocket 能通过 HTTP 代理建立连接吗?

可以,前提是代理支持隧道或 WebSocket 升级,并允许长时间保持连接。代理认证、空闲超时或缺少升级请求头,都可能导致连接无法建立。

轮换代理会在 WebSocket 连接期间更换 IP 吗?

不会,只要同一连接保持打开,IP 就不会更换。通常需要关闭 WebSocket 并重新建立连接,才能使用新的出口 IP。

相关术语

查看全部术语