目录

WebRTC,gRTC,SIP

WebRTC,gRTC,SIP 都属于网络通信领域,但处于不同层级,解决不同问题。

  • WebRTC: 解决"实时音视频/数据传输"
  • gRPC: 解决"服务之间高效调用"
  • SIP: 解决"电话/语音会话成立"

WebRTC

Web Real-Time Communication 是一个用于浏览器和应用之间进行实时通信的技术。

主要解决:

  • 实时音频通话
  • 视频通话
  • 屏幕共享
  • 点对点数据传输

例如:

  • 视频会议
  • 在线语音聊天
  • 远程协作
  • 浏览共享文件

核心特点

点对点(P2P)

浏览器之间直接数据传输:

A 浏览器  <----->  B 浏览器

超低延迟

通常几十毫秒到几百毫秒

适合:

  • 视频会议
  • 游戏语音
  • 实时互动

不适合:

  • 普通文件下载
  • 长时间离线消息

内置能力

WebRTC已经帮你处理:

  • 音视频编码
  • 网络抖动
  • 丢包恢复
  • NAT穿透
  • 加密

开发者不需要从 TCP / UDP底层重新做。

WebRTC的组成

MediaStream

获取摄像头、麦克风:

navigator.mediaDevices.getUserMedia()

RTCPeerConnection

建立 P2P 连接

RTCDataChannel

除了音视频,还能传输:

  • 文本
  • 文件
  • 游戏数据

WebRTC的典型架构

浏览器A
   │ 信令(Signaling)
信令服务器
浏览器B

建立连接后:

浏览器A <------P2P------> 浏览器B

注意:WebRTc不负责"信令"。

通常不需要:

  • WebSocket
  • gRPC
  • HTTP
  • SIP

来交换 SDP / ICE 信息。

gRPC

gRPC 是 Google 开发的高性能 RPC (远程过程调用) 框架。

解决的是:

“一台机器如何调用另一台机器上的函数”

类似:

result = remote_server.add(1, 2)

但实际上是网络通信。

gRPC 的特点

基于 HTTP/2

因此支持:

  • 多路复用
  • 长连接
  • 双向流
  • 高性能

使用 Protocol Buffers

数据不是 JSON,而是 protobuf。

message User {
	string name = 1;
	int32 age = 2;
}

优点:

  • 更小
  • 更快
  • 强类型

自动生成代码

定义接口:

service UserService {
	rpc GetUser(UserRequest) returns (UserResponse);
}

自动生成:

  • GO
  • C++
  • java
  • Python
  • TypeScript

客户端代码。

gRPC 常见场景

微服务通信

用户服务 <----gRPC----> 订单服务

这是最常见用途。

AI 推理

很多 AI 服务:

  • TensorFlow Serving
  • NVIDIA Triton

都使用gRPC。

实时流

gRPC 支持 streaming:

client ---> stream ---> server

因此也适合:

  • 日志
  • 实时数据
  • loT

gRPC 与 REST 的区别

项目 gRPC REST
协议 HTTP/2 HTTP/1.1
数据 protobuf JSON
性能
浏览器支持 一般 很好
类型安全
流式通信 一般

SIP

“Session Initiation Protocol” 是一个"会话建立协议"。

核心作用:

建立、修改、结束音视频通话。

它本身:

  • 不传输音频
  • 不传输视频

而是:

  • “打电话”
  • “挂电话”
  • “邀请加入会议”

这种控制协议。

SIP 类似电话系统

A 拨号给 B
B 响铃
B 接听
开始通话
挂断

这些流程由 SIP 管理。

SIP 消息示例

INVITE sip:bob@example.com SIP/2.0

表示:发起呼叫

SIP常见消息

消息 含义
INVITE 呼叫
ACK 确认
BYE 挂断
REGISTER 注册
OPTIONS 能力查询

SIP 常见应用

VoIP 电话

例如:

  • 企业 IP 电话
  • 呼叫中心
  • 软电话

IMS/运营商系统

移动运营商大量使用 SIP。

视频会议系统

很多传统会议系统:

  • Cisco
  • Avaya
  • Asterisk

都基于SIP。

三者关系

易混淆点:WebRTC 和 SIP 都能做"视频通话"。但它们职责不同。

SIP + WebRTC

常见结构:

浏览器(WebRTC)
       │ SIP over WebSocket
SIP Server
传统电话系统

这里:

  • WebRTC 负责媒体传输
  • SIP 负责呼叫控制

gRPC + WebRTC

现代架构中:

客户端
gRPC
信令服务器
WebRTC
P2P 音视频

这里:

  • gRPC 用于信令
  • WebRTC 用于实时媒体

总结

WebRTC:“如何实时传输音视频”

重点:

  • 低延迟
  • P2P
  • 实时媒体

gPRC:“如何高性能调用远程服务”

重点:

  • RPC
  • protobuf
  • 微服务

SIP:“如何建立和管理通话”

重点:

  • 呼叫控制
  • 电话系统
  • VoIP

类比:

技术 类比
SIP 电话拨号系统
WebRTC 电话里的语音通道
gRPC 后台系统之间的高速 API