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

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

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

学习

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

更多

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

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
WebSocket 实时通信/课时/Next.js 与 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综合练习

Next.js 与 WebSocket

客户端连接;服务端 WS 常独立部署。

25 分钟

Next.js 与 WebSocket

Next.js App Router 以 RSC 为主;WebSocket 是 有状态长连接,几乎总在 Client Component 或独立脚本里完成。CodeRoadMap platform 不在 Route Handler 里托管 WS。

学习目标

  • 理解为何 WS 不适合 Server Component
  • 在 "use client" 组件里连 Spring Boot
  • 知道生产环境 WS 常直连 backend 或经 Nginx

为何不用 RSC / Route Handler

层能否托管 WS原因
Server Component❌渲染完即结束,无持久连接
Route Handler⚠️ 受限Node 可升级,但与 Java 后端重复;本站不采用
Client Component✅浏览器直连 wss://
Spring Boot✅实验台 WS 权威端点

本站架构:Next 渲染页面 + 浏览器 WS 连 Java(ws-stomp)。

客户端封装

// platform/src/components/lab/LabChat.tsx
"use client";

import { useLabSocket } from "@/hooks/useLabSocket";

export function LabChat({ sessionId }: { sessionId: string }) {
  const { messages, send } = useLabSocket(sessionId);
  // UI ...
}

父级 Server Component 用 REST 取 sessionId 与历史:

// page.tsx — Server Component
const session = await fetch(`${API_BASE}/api/lab/sessions/${id}`).then(r => r.json());
return <LabChat sessionId={session.id} initialMessages={session.messages} />;

环境变量

# .env.local — 浏览器可见前缀
NEXT_PUBLIC_WS_URL=wss://coderoadmap.local/ws

开发时经 Nginx 统一入口(ngx-proxy),避免 CORS 与混合端口。

HMR 与 WS 并存

本地 npm run dev 时 Next HMR 也走 WebSocket Upgrade;Nginx 需对 / 与 /ws 分别反代,勿把 WS 流量误打到 Next dev server。

练习

  • 把 LabChat 做成 client boundary,确认 RSC 只传 props
  • 读 next-rsc 对比「服务端 fetch REST vs 客户端 WS」
  • 列出三种 WS URL 配置(dev / test / prod)
  • 小结

    Next 负责壳与首屏数据,WS 在浏览器连 Java。 下一课握手鉴权。

    加载本节练习…
    ← 上一课浏览器客户端下一课 →鉴权与安全