CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
WebSocket 实时通信/课时/协议与握手
RawBlame
课时目录12 节

WebSocket 实时通信

  1. 01WebSocket 是什么
  2. 02协议与握手
  3. 03Spring WebSocket
  4. 04STOMP 消息
  5. 05浏览器客户端
  6. 06Next.js 与 WebSocket
  7. 07鉴权与安全
  8. 08水平扩展
  9. 09SSE 对照
  10. 10Nginx 反代升级
  11. 11测试与调试
  12. 12综合练习

协议与握手

Upgrade 握手、帧、ping/pong、关闭码。

30 分钟

协议与握手

WebSocket 不是独立端口协议,而是 HTTP Upgrade 升级而来。Nginx 必须透传 Upgrade 头(ngx-proxy、ws-nginx)。

学习目标

  • 读懂握手请求/响应
  • 理解文本帧、二进制帧与 ping/pong
  • 知道常见关闭码含义

握手(Opening Handshake)

客户端先发普通 HTTP 请求,带 Upgrade: websocket:

GET /ws HTTP/1.1
Host: coderoadmap.local
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

服务端 101 Switching Protocols 后,同一 TCP 连接切换为 WebSocket 帧协议,不再走 HTTP 语义。

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

Spring Boot 内嵌 Tomcat 自动处理;自定义校验在 ws-auth。

帧与心跳

类型用途
文本帧JSON 消息(STOMP 载荷)
二进制帧文件、Protobuf
ping / pong保活、检测半开连接
close带 code + reason 优雅关闭
// 浏览器 API 自动处理 ping/pong;可监听 close
ws.onclose = (e) => console.log(e.code, e.reason);

常见关闭码:1000 正常结束;1006 异常断开(无 close 帧);1008 策略违规(如鉴权失败)。

与 HTTP/2、HTTP/3

浏览器里 WebSocket 仍常基于 HTTP/1.1 Upgrade。经 Nginx 反代时 proxy_http_version 1.1 必不可少。

练习

  • 用浏览器 DevTools → Network → WS 查看握手头
  • 解释 Sec-WebSocket-Accept 如何由 Key 算出
  • 对照 ws-client 看重连时是否收到 1006

小结

Upgrade 握手 + 帧 = WebSocket 全貌。 下一课 Spring 原生 WebSocketHandler。

加载本节练习…
← 上一课WebSocket 是什么下一课 →Spring WebSocket