这个“静态”网站是如何实现 P2P 聊天、房间和视频通话的?
发布: (2026年2月1日 GMT+8 14:56)
3 min read
原文: Dev.to
Source: Dev.to
概览
我最近偶然发现了一个名为 Talkrush – Stranger Chatting 的网站,它真正挑战了我对“静态站点”能做什么的认知。乍一看,它像是一个简单的 GitHub Pages 项目——没有后端、没有登录系统、也没有明显的 API。
功能
- 一对一陌生人聊天
- 群聊
- 命名聊天室
- 视频通话
房间
- 专用房间页面: Chat Rooms on Talkrush
- 群聊页面: Group Chat on Talkrush
同一个 group.html 文件通过更改查询参数即可表现为多个不同的房间,例如 Singles Group Chat Room。没有服务器端路由或后端生成的页面——仅是一个静态文件根据 URL 进行响应。
可能的实现方式
客户端机制
- URL 参数 决定房间名称/命名空间。
- 客户端 JavaScript 解析这些参数并相应地划分消息。
- 浏览器 API(WebRTC、WebSockets)处理实时通信。
可能的信令方案
- 使用 WebRTC 进行直接点对点连接。
- 在其他地方托管的轻量级信令层(例如 WebSockets)。
- 第三方抽象库,如 PeerJS、WebTorrent 或类似库。
即使站点看起来是静态的,信令仍必须在某处进行——浏览器在没有交换 offer 和 ICE candidate 的情况下无法相互发现。
观察到的行为
- 消息即时到达。
- 房间之间不冲突;不同组的用户保持隔离。
- 这表明对房间名称进行了精细的作用域划分和确定性的对等发现(房间名称 = 命名空间),并且对连接生命周期进行了良好的管理。
为什么令人印象深刻
尽管缺少传统后端,体验仍然干净且响应迅速:
- 不需要后端路由。
- 实时功能完全由客户端逻辑驱动。
- 挑战了“实时应用必须后端繁重”的假设。
讨论邀请
如果你有以下经验:
- 构建点对点聊天系统
- 在生产环境中使用 WebRTC
- 设计信令或匹配层
欢迎分享你会如何构建类似功能的思路。