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综合练习

测试与调试

wscat、集成测试要点。

25 分钟

测试与调试

WebSocket 调试分 协议层(wscat、DevTools)与 集成层(Spring Test + STOMP 客户端)。与 sb-test 互补。

学习目标

  • 用 wscat / websocat 手动握手发帧
  • 写 Spring Boot WebSocket 集成测试
  • 定位 Nginx Upgrade 与鉴权失败

命令行工具

# npm i -g wscat
wscat -c ws://localhost:8080/ws/lab

# 发 STOMP CONNECT(简化示例)
CONNECT
accept-version:1.2
host:localhost

^@

生产路径经 Nginx:wscat -c wss://coderoadmap.local/ws --header "Cookie: satoken=..."

Spring 集成测试

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
class StompChatIntegrationTest {

    @LocalServerPort int port;
    WebSocketStompClient stompClient;

    @BeforeEach
    void setup() {
        stompClient = new WebSocketStompClient(new StandardWebSocketClient());
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());
    }

    @Test
    void shouldBroadcastChatMessage() throws Exception {
        StompSession session = stompClient.connectAsync(
                "ws://localhost:" + port + "/ws", new StompSessionHandlerAdapter() {})
                .get(5, TimeUnit.SECONDS);
        // subscribe + send + assert
    }
}

MockMvc 不支持 WS;需 WebSocketStompClient 或 Testcontainers 全栈。

常见问题

现象可能原因
200 而非 101Nginx 缺 Upgrade(ws-nginx)
403 on handshakews-auth token 无效
连上无消息未 SUBSCRIBE 或 sessionId 不匹配
1006 频繁代理超时、实例重启

浏览器 DevTools → Network → WS 帧面板可对照 STOMP 命令。

练习

  • 用 wscat 连本地 /ws,记录 101 响应头
  • 为 LabChatController 写一条订阅+广播断言
  • 故意去掉 Nginx Upgrade,复现失败并截图

小结

wscat 查协议,StompClient 查业务。 下一课综合练习聊天室。

加载本节练习…
← 上一课Nginx 反代升级下一课 →综合练习