跳到正文

WebSocket

中级通用

WebSocket 是让浏览器与服务器建立持续连接、双方都能主动发送消息的通信方式。它解决了实时互动中反复发起请求的不便,例如多人协作白板可以及时同步光标和操作。

你可能会说:「我想让多人白板里的光标和操作及时同步,用户操作和服务器消息都能随时传过去。」

读之前建议先了解

动手看看

建立连接连接成功浏览器A已连接服务器浏览器B未连接
1

用户 A 打开白板,浏览器与服务器完成握手,建立一条可以持续收发消息的 WebSocket 连接。

要点

  1. 1

    先建立连接再交换消息

    浏览器先通过一次 HTTP 握手请求建立 WebSocket 连接。连接建立后,你和服务器可以沿着这条连接互相发消息,不必为每次更新重新发起 HTTP 请求。

  2. 2

    双方都能主动发送消息

    做协作白板时,你拖动图形,浏览器可以把操作发给服务器;别人修改了画布,服务器也可以主动把变化发回来。这是它适合双向实时互动的原因。

  3. 3

    断线后的状态仍要处理

    持续连接也会因网络切换、页面关闭或服务端重启而断开。WebSocket 不会替产品决定如何重连、补回遗漏消息;如果不能丢更新,你还得设计这些处理方式。

容易混淆的地方

普通 HTTP 请求通常由客户端发起,服务器返回响应;轮询是客户端隔一段时间再问一次。WebSocket 建立连接后,双方都能主动发消息。它也不同于常见的 SSE:SSE 主要用于服务器向浏览器持续推送;如果浏览器还要频繁向服务器发送实时操作,WebSocket 更合适。

什么时候用

适合用

  • 做多人协作白板时,用户不断移动光标、编辑内容,你希望服务端把变化及时转发给其他在线用户。
  • 做在线对战或实时控制界面时,客户端持续发送操作,服务端也持续返回其他参与者的状态。
  • 做实时聊天时,用户发送消息,也希望新消息和在线状态能由服务端主动送达。

不适合用

  • 用户只是提交一次表单并等待结果,用普通 HTTP 请求就能完成,没必要维持一条持续连接。
  • 后台报表每隔几分钟刷新一次,定时发起 HTTP 请求通常更简单,也符合更新频率。
  • AI 生成回答时只有服务器持续向页面输出文本,浏览器无需在过程中实时回传消息,可以先考虑流式 HTTP 响应或 SSE。

练一练

你在做多人协作白板:每个人拖动图形时,其他在线用户要及时看到变化;服务器也会随时推送别人的操作。你会让 AI Agent 优先考虑哪种通信方式?

让 AI 帮你做

请为多人协作白板设计 WebSocket 通信:客户端发送拖动操作,服务端把变化转发给其他在线用户。请说明连接建立、身份校验、断线重连和重新同步状态的方案;首次加载画布数据可使用普通 HTTP 请求。

接下来学什么