WebSocket
中级通用
WebSocket 是让浏览器与服务器建立持续连接、双方都能主动发送消息的通信方式。它解决了实时互动中反复发起请求的不便,例如多人协作白板可以及时同步光标和操作。
你可能会说:「我想让多人白板里的光标和操作及时同步,用户操作和服务器消息都能随时传过去。」
动手看看协作白板同步光标和画笔
1
用户 A 打开白板,浏览器与服务器完成握手,建立一条可以持续收发消息的 WebSocket 连接。
要点WebSocket 怎样让双方持续通信?
- 1
先建立连接再交换消息
浏览器先通过一次 HTTP 握手请求建立 WebSocket 连接。连接建立后,你和服务器可以沿着这条连接互相发消息,不必为每次更新重新发起 HTTP 请求。
- 2
双方都能主动发送消息
做协作白板时,你拖动图形,浏览器可以把操作发给服务器;别人修改了画布,服务器也可以主动把变化发回来。这是它适合双向实时互动的原因。
- 3
断线后的状态仍要处理
持续连接也会因网络切换、页面关闭或服务端重启而断开。WebSocket 不会替产品决定如何重连、补回遗漏消息;如果不能丢更新,你还得设计这些处理方式。
容易混淆的地方
普通 HTTP 请求通常由客户端发起,服务器返回响应;轮询是客户端隔一段时间再问一次。WebSocket 建立连接后,双方都能主动发消息。它也不同于常见的 SSE:SSE 主要用于服务器向浏览器持续推送;如果浏览器还要频繁向服务器发送实时操作,WebSocket 更合适。
什么时候用
适合用
- 做多人协作白板时,用户不断移动光标、编辑内容,你希望服务端把变化及时转发给其他在线用户。
- 做在线对战或实时控制界面时,客户端持续发送操作,服务端也持续返回其他参与者的状态。
- 做实时聊天时,用户发送消息,也希望新消息和在线状态能由服务端主动送达。
不适合用
- 用户只是提交一次表单并等待结果,用普通 HTTP 请求就能完成,没必要维持一条持续连接。
- 后台报表每隔几分钟刷新一次,定时发起 HTTP 请求通常更简单,也符合更新频率。
- AI 生成回答时只有服务器持续向页面输出文本,浏览器无需在过程中实时回传消息,可以先考虑流式 HTTP 响应或 SSE。
练一练选一个答案,看看解释
你在做多人协作白板:每个人拖动图形时,其他在线用户要及时看到变化;服务器也会随时推送别人的操作。你会让 AI Agent 优先考虑哪种通信方式?
让 AI 帮你做复制给 AI Agent 直接用
请为多人协作白板设计 WebSocket 通信:客户端发送拖动操作,服务端把变化转发给其他在线用户。请说明连接建立、身份校验、断线重连和重新同步状态的方案;首次加载画布数据可使用普通 HTTP 请求。