本文目录导读:

这是一个非常经典的技术选型问题,简单直接的结论是:它们不是“二选一”的替代关系,而是“协作关系”,在Web实时通信中,WebSocket通常用于信令交换,WebRTC用于媒体数据传输。
下面从核心定位、技术特点、典型场景三个维度进行对比分析,帮助你做出选择:
核心定位不同
| 特性 | WebSocket | WebRTC |
|---|---|---|
| 核心目标 | 双向实时文本/二进制数据传输 | 点对点音视频/数据流传输 |
| 数据流模型 | 客户端到服务器(C/S模型) | 浏览器到浏览器(P2P模型) |
| 传输层协议 | 基于TCP(可靠,但增加延迟) | 基于UDP(不可靠,但更低延迟) |
| 网络穿透 | 不支持(需服务器中转) | 内置ICE、STUN、TURN协议,支持NAT穿透 |
| 浏览器API | 原生的WebSocket对象 |
原生getUserMedia、RTCPeerConnection、RTCDataChannel |
技术能力对比
| 能力 | WebSocket | WebRTC |
|---|---|---|
| 延迟 | 低(但受TCP重传影响,弱网下可能变高) | 极低(UDP,抗丢包,适合实时音视频) |
| 可靠性 | 高(TCP保证全量有序到达) | 低(UDP无保证,但可自行实现FEC/重传) |
| 带宽效率 | 中等(TCP头部+协议开销) | 高(UDP头部短,支持音视频编码自适应) |
| 安全性 | WSS(TLS加密) | 强制DTLS/SRTP加密(无法绕过) |
| 并发连接 | 浏览器有限制(一般6-8个) | 点对点连接,无服务器单点瓶颈 |
| 数据格式 | 文本(字符串)或二进制(Blob/ArrayBuffer) | 支持音视频流(MediaStream),也支持任意二进制数据(RTCDataChannel) |
典型应用场景
✅ 选择 WebSocket
- 聊天室(文本消息、表情、小文件)
- 实时数据推送(股票行情、游戏排行榜、协作编辑)
- IoT指令下发(控制设备开关、获取传感器数据)
- WebRTC的信令通道(交换SDP、ICE候选者)
✅ 选择 WebRTC
- 视频会议(1对1或多方)
- 屏幕共享(桌面/应用窗口捕获)
- 实时音视频直播(低延迟互动,如在线教育、游戏直播连麦)
- P2P文件传输(大文件,无需服务器存储)
- 远程桌面/游戏操作(极低延迟控制)
✅ 需要同时使用 WebSocket + WebRTC
这是实际项目中最常见的组合,WebSocket负责信令,WebRTC承载媒体流。
典型架构:
浏览器A ——WebSocket(SDP/ICE)——> 服务器 ——WebSocket(SDP/ICE)——> 浏览器B
↓ ↓
←——————— WebRTC (RTP/RTCP) ————————→
为什么不能只用WebRTC?
- WebRTC没有指定信令传输方式(SDP、ICE候选者需要通过某通道交换)
- WebRTC需要先知道对方“在哪儿”(IP、端口、支持的编码等),这个信息必须通过信令通道交换
决策建议
| 你的需求 | 推荐技术 |
|---|---|
| 只用文本/二进制消息,无需音视频 | WebSocket |
| 实时音视频通话/直播/屏幕共享 | WebRTC |
| 需要音频+文字+文件传输的完整通信应用 | WebSocket(信令)+ WebRTC(媒体) |
| 低延迟、大容量的数据同步(如游戏状态) | 可考虑 WebSocket(可靠性要求高)或 WebRTC DataChannel(延迟要求极高) |
| 需要一对多广播(直播推流) | WebSocket(服务器转发)或 WebRTC + SFU(选择性转发单元) |
潜在坑点
- WebSocket的TCP限制:在弱网(高丢包、高延迟)下,TCP的拥塞控制和重传会导致延迟飙升,不适合实时音视频。
- WebRTC的复杂性:信令协商(SDP)、防火墙穿透(STUN/TURN)、编解码器协商(Opus/H264...)、带宽估计(GCC/REMB)等都需要深入理解。
- 浏览器支持:WebSocket所有现代浏览器都支持;WebRTC主流浏览器均支持,但移动端WebView(如iOS WKWebView)存在部分限制。
- 只传文本/短数据、依赖服务器逻辑 → WebSocket
- 传音视频流、需点对点低延迟 → WebRTC
- 做一个完整的实时通信应用 → WebSocket做信令,WebRTC做媒体
建议从具体业务场景出发:如果只是做个通知推送或在线客服,WebSocket足够;如果要做一个Zoom或腾讯会议,必须用WebRTC。