WebSocket
一套独立的应用层协议(RFC6455),建立双向长连接传输通道, 适合:实时消息、视频信令、设备状态推送
- HTTP:协议(RFC7230),短连接,一问一答。
- WebSocket:协议(RFC6455) ,全双工长连接。
- 握手:客户端发送
HTTP GET请求,带上Upgrade: websocket - 服务端返回
101 Switching Protocols - 握手完成后,TCP 连接不关闭, 传输WebSocket 协议帧,双方随时互相发消息(全双工)
- 握手:客户端发送
- TCP:传输层协议,WebSocket 跑在 TCP 之上。
TCP 是底层字节流,WebSocket 定义了帧格式、消息分片、掩码、关闭码、ping/pong 心跳这些上层规则。
WS和WSS
WS = WebSocket 明文;WSS = WebSocket + TLS 加密(类似 HTTP 和 HTTPS)
| 项目 | WS ws://172.29.108.11:8080/signal |
WSS wss://shturl.cc/MMCUKuxkg |
|---|---|---|
| 底层传输 | TCP 明文 | TCP + TLS 加密(443 默认) |
| URL 前缀 | ws:// | wss:// |
| 浏览器跨域安全 | 公网浏览器禁止;内网局域网可用 | 公网浏览器允许 |
| 证书 | 不需要 | 需要 SSL 证书(自签 / CA 证书) |
| 抓包 | wireshark 直接看到明文信令 | 密文,无法直接看到消息 |
| 端口习惯 | 自定义端口如 8080、9000 | 默认 443(可复用 HTTPS 端口) |
| 适用场景 | 容器内网:cv-gateway ↔ RTVS ↔ mediasoup(cvnetwork 172.29.108.x) |
公网用户浏览器网页预览 |
| Nginx 反向代理 | 支持 | Nginx 配置 ssl 证书 + upgrade |
WS 与 WebRTC 的区别
| WebSocket(WS/WSS) | WebRTC |
|---|---|
| 承载:TCP | 承载:UDP(为主) |
| 用途:信令、指令、文本消息 | 用途:音视频媒体 RTP 流 |
| 上层:JSON 业务信令 | 上层:RTP/RTCP 媒体包 |
| 可以走 Nginx 代理 | P2P/SFU,一般不经过 Nginx 代理媒体流 |