10-实时通信协议对比速查

简介: 这是一份专为面试打造的实时通信协议速查指南,涵盖HTTP、MQTT、WebSocket、WebRTC、TCP Socket及阿里云Push六大协议。聚焦真实项目场景,用“一句话定位+代码位置+口诀记忆”方式,助你5分钟掌握选型逻辑与高频考点,直击IoT、音视频、推送等核心需求。

实时通信协议对比速查(面试必备)

用途:面试时能脱口而出,背得滚瓜烂熟
适合:项目里有 MQTT / WebSocket / WebRTC / TCP Socket / 阿里云 Push 的同学
核心思想:没有最好的协议,只有最合适的协议


〇、面试速记版(5 分钟版先看这个)

面试前 5 分钟只看这一节,足够应付 80% 的提问。

1. 项目用了哪些协议?—— 5 + 1

mermaid diagram

一句话:「HTTP 拉数据,MQTT/TCP 管设备,两个 WebSocket 管通知和信令,WebRTC 传音视频,阿里云 Push 做杀进程兜底。」

2. 项目里各协议 → 业务 → 代码位置(一图背完)

协议 项目用途 关键代码
HTTP 登录、拿房屋/设备列表、开锁、配置下发 src/services/api.js
MQTT 智能家居外网主控:设备状态 + 控制指令 + 场景/定时 src/models/home.js NB_SDK.connection.subscribe(...);src/components/Device/HOC/Device.js NB_SDK.exec(topic,...)
TCP Socket 内网模式直连家里主机 8888,收主机推送的设备状态(JSON + && 分隔) src/pages/Intranet/index.js TcpSocket.createConnection({port:8888})
WebSocket #1 云对讲通知:自家后端推 {type:1} 来电、{type:3} 结束 src/pages/Home/index.js:${WEBSOCKET_URL}/newhomewss/ws/app/${token}
WebSocket #2 思悦 WebRTC 信令:交换 SDP / ICE 候选 src/pages/CloudTalk/SiruisCloudCall.js:wss://webrtc.insprid.cn/new_wss?token=...&type=access
WebRTC 思悦对讲音视频(业主只发音频 + 看门口画面) src/pages/CloudTalk/SiruisCloudCall.js:mediaDevices.getUserMedia({audio:true, video:false}) + <RTCView>
阿里云 Push 杀进程兜底:App 死了也能收到门口机呼叫 src/App.tsx global.onNotifycation;src/models/login.js AliyunPush.*

3. 3 句必背口诀

1. MQTT 广播站一对多(订阅 Topic),WebSocket 专线电话一对一(连到服务器)
2. HTTP 一问一答断线,WebSocket 长连双向服务器主动推
3. WebRTC P2P 直连传音视频,WebSocket 服务器中转传信令

4. 4 个 WebRTC 名词(必记)

SDP   媒体描述(编解码、分辨率、传输方式)
ICE    NAT 穿透候选(host / srflx / relay)
STUN   拿到公网 IP(srflx)
TURN   中继服务器(relay,最后兜底)

5. 面试 5 句话模板(直接背)

「我们项目用了 5 种通信协议:

  1. HTTP 处理 90% 的常规请求;
  2. MQTT 用于智能家居外网设备控制和状态推送(订阅 Topic);
  3. TCP Socket 仅内网模式直接连家里主机 8888 端口;
  4. WebSocket 两条:一条自家后端推云对讲通知,一条思悦服务器做 WebRTC 信令;
  5. WebRTC 跑思悦对讲的音视频。

杀进程兜底用阿里云 Push,系统级通道,App 死了也能收到门口机呼叫。

选型理由:MQTT 天然一对多 + QoS 适合 IoT;WebRTC P2P 传音视频延迟低、服务器压力小;HTTP 简单请求-响应足够;TCP Socket 是内网直连主机的特殊场景。」

6. 何时选哪个?(决策树速查)

高频实时 + 一对多 + Topic 路由 + IoT 设备   → MQTT
高频实时 + 一对一 + 简单消息(聊天/通知)   → WebSocket
高频实时 + 音视频 + P2P                     → WebRTC(+ WebSocket 当信令)
低频 + 请求-响应(拉数据/配置)             → HTTP
原始字节流 + 内网直连特殊场景               → TCP Socket
系统级通知 + 杀进程可达                     → 阿里云 Push / APNs / 厂商通道

7. 思悦 vs 海康 对讲对照(常被问)

维度 思悦云对讲 海康云对讲
信令 WebSocket(自家思悦服务器) 海康私有协议
媒体 WebRTC(P2P,UDP) 海康私有协议(闭源)
入口代码 src/pages/CloudTalk/SiruisCloudCall.js src/pages/CloudTalk/HikCloudTalkPlayer.js + ios/CloudOpenSDK/
业主侧 只发音频 + 看门口画面 取决于 SDK 模式

一、一句话总结(必背)

mermaid diagram

项目使用一览(同项目里必然用到的几种):

协议 项目里用的场景
HTTP 登录、拿房屋列表、拿设备列表、开锁接口(90% 的请求)
TCP Socket 内网模式直连家里主机 8888 端口,推送设备状态
WebSocket 云对讲通知通道(自家后端)+ 思悦 WebRTC 信令通道
MQTT 智能家居 8 种设备的控制指令 + 状态推送(外网)
WebRTC 思悦对讲的音视频通话(业主纯音频 + 门口视频)
阿里云 Push 云对讲杀进程兜底通知(业主在抖音时也能收到门口呼叫)

二、6 种协议功能对照表

协议 功能定位 传输内容 方向 协议层
HTTP 静态/低频数据请求 JSON / 文件 C → S → C 应用层
TCP Socket 原始可靠字节流 任意 双向 传输层
WebSocket Web 实时双向通信 文本/JSON 双向 应用层
MQTT IoT 一对多消息 小消息 发布→订阅 应用层
WebRTC 实时音视频通话 音视频流 + 数据 P2P 应用层
阿里云 Push 系统级通知 通知文本 S → C 应用层

三、三组对照(必背)

对照 1:MQTT vs WebSocket(最常考)

维度 MQTT WebSocket
全称 Message Queuing Telemetry Transport Web Socket
出生 1999(IBM 卫星链路) 2008(HTML5)
设计目标 IoT 设备在低带宽不稳定网络通信 Web 实时双向通信
架构模式 Pub/Sub(发布订阅,一对多) C/S(点到点,一对一)
谁主动推 Broker 中间代理 服务器
路由方式 Topic(主题) URL Path
例子 Topic home_123/light/cmd /ws/app/{token}
头部大小 极小(固定头部最小 2 字节,可变头部+payload 另算) 中等(2-14 字节)
一对多 ✅ Topic 天然支持(多个订阅者收同一消息) ❌ WebSocket 本身只支持 1 对 1(多对多要服务器转发)
离线消息 ✅ Broker 暂存 ❌ 断了就丢
消息保留 ✅ 新订阅者能拿最新 ❌ 不支持
QoS(服务质量) ✅ 3 个等级(0/1/2) ❌ 没内建,要自己重试去重
端口 1883(TCP)/ 8883(WSS) 80/443(HTTP 友好,防火墙不拦)
浏览器支持 ❌ 要 JS 库 ✅ 原生
适用 IoT、车联网、工业传感器 Web 实时、聊天室、股票行情、推送

💡 关键区别:MQTT 天然一对多(一个 Topic 可多个订阅者),WebSocket 天然一对一(客户端 ↔ 服务器)。
群聊实现:所有客户端都连同一个 WebSocket 服务器,服务器负责把 A 的消息转发给 B、C。WebSocket 自己不直接多对多。

口诀:

MQTT 是"广播站"(一对多,订阅 Topic 收消息),WebSocket 是"专线电话"(一对一到服务器)。

项目里实际使用对比:

业务 协议 代码位置
智能家居设备控制 + 状态推送 MQTT src/components/Device/HOC/Device.js
NB SDK exec(topic, ...)
云对讲来电通知 WebSocket #1 src/pages/Home/index.js
连 wss://CLOUD_IP/newhomewss/ws/app/{token}
思悦 WebRTC 信令 WebSocket #2 src/pages/CloudTalk/SiruisCloudCall.js
连 wss://webrtc.insprid.cn/new_wss

对照 2:HTTP vs WebSocket(最常问)

维度 HTTP WebSocket
模型 请求-响应(一问一答) 长连接
方向 也双向(客户端发、服务器回),但一问一答 双向(随时发、随时收)
连接 短连接(响应后断开,下次重连) 长连接(一次连上保持开着)
状态 无状态(服务器不记得上次请求) 有状态(服务器知道连接活跃)
实时性 ❌ 差(要主动问,依赖轮询) ✅ 好(服务器主动推)
适用 静态页面、API 调用 聊天、推送、协同编辑

口诀:

HTTP 是"一问一答、断一次"(发请求、收响应、断开),WebSocket 是"专线、双向、不断"(连上一次保持开着,客户端 ↔ 服务器)。

项目实际使用:

  • HTTP → REST API(登录、拿设备列表、开门接口)
  • WebSocket → 实时通知(云对讲来电)

💡 群聊怎么实现? 多客户端通过同一个服务器互相转发消息,每个客户端和服务器都是 WebSocket(一对一的专线),服务器帮客户端之间传话。WebSocket 本身不直接多对多。


对照 3:WebRTC vs WebSocket(音视频专题)

维度 WebRTC WebSocket
模型 P2P(点对点,客户端 ↔ 客户端) C/S(客户端 ↔ 服务器)
传输内容 音视频流 + 数据 文本/任意数据
编解码 ✅ Opus/H.264 自带 ❌ 不带
NAT 穿透 ✅ 内置 STUN/TURN ❌ 没有
延迟 50-200ms 200ms+(经服务器)
服务器压力 低(不转发音视频) 高(所有数据过服务器)
适合 音视频通话 聊天室、股票行情、推送

WebRTC 必须配 WebSocket 当信令通道!

mermaid diagram

WebRTC 必须配 WebSocket 当信令通道(可视化)

阶段 信令通道(WebSocket) 媒体流(WebRTC)
建立连接 ✅ 必须 -
协商媒体参数 ✅ 必须 -
NAT 穿透(ICE) ✅ 必须 -
传输音视频 ❌ 不参与 ✅ P2P 直连
关闭连接 ✅ 必须 -

项目里实际使用对比:

业务 协议 代码位置
思悦云对讲信令(交换 SDP/ICE) WebSocket src/pages/CloudTalk/SiruisCloudCall.js
方法 connectWebSocket(token)
思悦云对讲音视频传输 WebRTC src/pages/CloudTalk/SiruisCloudCall.js
mediaDevices.getUserMedia({video:false, audio:true})
海康云对讲 ❌ 不走 WebRTC 用海康私有协议(闭源)
项目没有微信视频那种"后台悬浮通话" - 需要 iOS voip 后台模式 + Android 前台服务

口诀:

WebRTC 是"两台手机 P2P 直连传音视频",WebSocket 是"两台手机通过服务器中转传信令"。

项目实际使用:

  • 思悦对讲:WebRTC 做音视频(P2P)+ 另一个 WebSocket 当信令(通过服务器中转)
  • 海康对讲:用海康私有协议(不走 WebRTC)

四、3 个"特殊"的协议

4.1 TCP Socket(最基础)

TCP 是什么? 传输层"可靠管道"协议。HTTP/MQTT/WebSocket 都跑在它上面。

  • 可靠:丢包会自动重传、按顺序到达、不重复
  • 字节流:传的是任意字节,没有消息边界
  • 管道:应用层协议(HTTP/WS/MQTT)跑在它上面

⚠️ 注意:TCP 是"底层管道",不是"另一种通信方式"。写代码时几乎不直接用 TCP,而是用 HTTP/WebSocket/MQTT。只有内网直连主机这种特殊场景才直接用 TCP Socket。

mermaid diagram

项目实际使用:

mermaid diagram

  • 入口:仅在用户主动进入「内网」Tab 时建链,IP 来自 redux 的 intranetIp
  • App 端:直连家里主机的 8888 端口(TcpSocket.createConnection({port:8888, host:intranetIp}))
  • iOS 专属:用 NetworkInfo.getIPAddress() 拿本机 IP 作为 localAddress,避免多网卡选错出口
  • 自定义协议:JSON 对象 + && 作为多帧分隔符(主机主动推送设备状态)
  • 半包处理:代码里维护 lastData 变量拼接跨包数据(这一点面试很加分)
  • 代码位置:src/pages/Intranet/index.js createSocket()

4.2 WebRTC(音视频专属)

3 大核心 API:

  • MediaStream:拿摄像头/麦克风
  • RTCPeerConnection:建立 P2P 连接(处理 NAT 穿透)
  • RTCDataChannel:P2P 数据传输

WebRTC 走的是什么通道?

阶段 走哪个
信令交换(SDP/ICE candidate) 走 WebSocket(不是 WebRTC 自己)
媒体传输(音视频流) 走 RTP over UDP(不是裸 TCP)
NAT 穿透 走 STUN/TURN 服务器
DTLS 握手 / SCTP(DataChannel) WebRTC 内部混合通道

💡 重要:WebRTC 的媒体流默认走 UDP,因为音视频实时性强、丢包比延迟好。
但 WebRTC 不是「完全不用 TCP」——DTLS 握手、DataChannel 等控制面会走可靠通道,ICE 候选里也有 tcp 类型。面试说「媒体走 UDP P2P」就够稳。

音视频能力可视化:

mermaid diagram

项目实际使用:

mermaid diagram

  • 思悦对讲:业主 App 端 getUserMedia({video: false, audio: true})
    • 业主只发音频,不露脸
    • 业主通过 <RTCView> 看门口画面
  • 代码位置:src/pages/CloudTalk/SiruisCloudCall.js getLocalStream()

4.3 阿里云 Push(系统级通知)

是什么? 阿里云提供的系统级推送服务,底层用 MQTT,但提供:

  • 系统通知栏显示
  • APNs(iOS)+ 厂商通道(Android 华为/小米/OPPO/vivo)
  • 离线消息保留 3-7 天

架构图:

mermaid diagram

项目实际使用:

  • 云对讲:业主 App 杀进程时也能收到门口机呼叫通知
  • 智能家居:不使用(设备状态用 MQTT 即可)

为什么必须用它?

  • App 死了 → MQTT 连接断了 → 收不到任何推送
  • 只有系统级推送(APNs/厂商通道)能在 App 死后送达

五、本项目用了哪几种?

mermaid diagram

各业务对应的协议 + 代码位置:

业务 协议 代码位置 作用
智能家居控制(外网) MQTT src/components/Device/HOC/Device.js
NB_SDK.exec(topic, data)
设备控制指令 + 状态推送
智能家居控制(内网) TCP Socket src/pages/Intranet/index.js
TcpSocket.createConnection({port: 8888})
直连家里主机
云对讲通知(前台) WebSocket #1 src/pages/Home/index.js
连 wss://CLOUD_IP/newhomewss/ws/app/{token}
收到 {type:1, 3} 来电事件
思悦通话信令 WebSocket #2 src/pages/CloudTalk/SiruisCloudCall.js
connectWebSocket(token)
交换 SDP/ICE
思悦通话音视频 WebRTC 同上 getLocalStream() + <RTCView> P2P 传输
海康通话 海康私有协议 ios/CloudOpenSDK/ + android/.../HikVideoTalkActivityModule.java 闭源 SDK(不走 WebRTC)
MQTT Broker 地址 — src/services/api.js getMqttConnectInfo() post-cn-45909szlj0u.mqtt.aliyuncs.com(aliyun)
杀进程兜底 阿里云 Push src/App.tsx global.onNotifycation 系统通知栏
登录、拿数据、开锁 HTTP src/services/api.js REST API

在这里插入图片描述

六、口诀速记(面试脱口而出)

口诀 1:3 个易混对比

MQTT vs WebSocket → "广播站 vs 专线电话"
HTTP vs WebSocket → "一问一答、断线 vs 长连、双向"
WebRTC vs WebSocket → "P2P 直连 vs 服务器中转"

口诀 2:何时用哪个?

高频实时 + 一对多 + Topic 路由 → MQTT
高频实时 + 一对一 + 简单消息 → WebSocket
高频实时 + 音视频 + P2P → WebRTC
低频静态 + 请求-响应 → HTTP
原始字节流 + 自定义 → TCP Socket
系统级通知 + 杀进程可达 → 阿里云 Push / APNs / 厂商通道

口诀 3:项目里各业务用什么

智能家居 → MQTT(云端)+ TCP Socket(家里)
云对讲通知 → WebSocket(自家后端)
云对讲兜底 → 阿里云 Push
云对讲通话 → 海康 SDK / WebRTC + WebSocket 信令
通用 API → HTTP

口诀 4:5 个协议层级记忆

HTTP/1.1 应用层
WebSocket 应用层(基于 HTTP 升级)
MQTT 应用层(基于 TCP)
WebRTC 应用层(基于 UDP)
TCP 传输层(所有协议的管道)

七、面试常见问题速答

Q1:WebSocket 和 Socket 的区别?

  • Socket 是编程接口(API),不是协议
  • WebSocket 是协议(基于 TCP)
  • 我们用的 react-native-tcpSocket 是用 Socket API 实现 TCP 连接

Q2:MQTT 为什么适合 IoT?

  • 头部小(2 字节),适合低带宽
  • Pub/Sub 模式天然支持一对多
  • QoS 保证消息到达
  • Topic 路由天然支持隔离
  • 离线消息保留

Q3:WebRTC 必须配 WebSocket 当信令?

✅ 是的。WebRTC 自己不带信令通道,SDP/ICE 候选交换必须用 WebSocket / Socket / HTTP 等其他通道。

Q4:阿里云 Push 和 MQTT 都是推送,区别?

  • 阿里云 Push = 系统级(杀进程可达,走 APNs / 厂商通道)
  • MQTT = 应用层(App 死了就断了)
  • 阿里云 Push 在 Android 上确实用「类 MQTT 的自建长连接」,但不是直接复用业务的 MQTT Broker(业务 MQTT 是 post-cn-45909szlj0u.mqtt.aliyuncs.com,推送通道是另一套),主要靠厂商系统通道送达

Q5:HTTP 轮询 vs WebSocket vs MQTT 选哪个?

场景 推荐
数据变更频率低(分钟级) HTTP 轮询
实时双向 + 一对一 + 简单消息 WebSocket
实时一对多 + Topic 路由 + IoT 设备 MQTT
音视频通话 WebRTC(+ WebSocket)

Q6:MQTT 和 Kafka 的区别?

  • MQTT = 物联网消息协议(轻量,IoT 设备用)
  • Kafka = 分布式消息队列(重型,服务端日志流处理用)
  • 完全不同的应用场景

Q7:智能家居为什么用 MQTT 不用 HTTP?

  • 设备状态高频变化,HTTP 轮询效率低
  • MQTT Topic 天然支持一对多(一个设备状态推送给所有订阅者)
  • QoS 保证消息到达
  • 头部小,IoT 设备带宽友好

七点五、TCP/IP 5 层架构(谁跑在谁上面)

很多人搞不清"谁跑在谁上面",用这张 5 层架构图一图讲清楚:

mermaid diagram

5 层模型记忆口诀:

┌─────────────────────────────────────────────────────────────┐
│  应用层    ← 程序员写代码的地方(HTTP/WS/MQTT/WebRTC) │
│  传输层    ← TCP(可靠)/ UDP(快)                   │
│  网络层    ← IP 协议(IP 地址寻址)                  │
│  数据链路层 ← 以太网、Wi-Fi、4G/5G                  │
│  物理层    ← 网线、光纤、无线电波                  │
└─────────────────────────────────────────────────────────────┘

关键 3 点:

  1. 每层只关心自己的事:上层"看不见"下层细节(HTTP 不需要懂 TCP 怎么重传)
  2. 每层给上层提供服务:TCP 给 HTTP 提供"可靠字节流"服务
  3. 协议依赖关系是单向的:应用层协议(HTTP)依赖传输层(TCP),TCP 依赖网络层(IP),IP 依赖链路层

本项目用到的协议分别在哪一层:

协议 层级 说明
HTTP / WebSocket / MQTT / 阿里云 Push 应用层 程序员直接调用
WebRTC 应用层 媒体走 RTP over UDP(P2P),控制面混合通道
TCP Socket(内网直连主机) 传输层 直接调用 TCP(不常用,特殊场景)
TCP 传输层 HTTP/WS/MQTT 都跑在它上面
UDP 传输层 WebRTC 媒体流走它
IP 网络层 一般不直接用,被 TCP/UDP 间接调用
Wi-Fi / 4G 链路层 + 物理层 系统自动处理,程序员无感

八、一张图速查

mermaid diagram

记住这张图的 3 个要点:

  1. 应用层有 5 种协议(HTTP / WebSocket / MQTT / WebRTC / 阿里云 Push)
  2. 传输层有 1 种主力 + 1 种辅助(TCP Socket + UDP)
  3. 大多数协议都跑在 TCP 上(WebRTC 例外,走 UDP)

九、一句话总结

mermaid diagram

口诀:

选哪个?看场景!


面试前 5 分钟过一遍:看这张图就能脱口而出所有对比。
面试时背 3 个口诀:

  1. "MQTT 广播站一对多,WebSocket 专线电话一对一"
  2. "WebRTC P2P 直连传音视频,WebSocket 服务器中转传信令"
  3. "HTTP 一问一答断开,WebSocket 长连双向"
相关文章
|
5天前
|
人工智能 JSON API
全网刷屏的 Jev 模型正式开放!一手实战测评 + 保姆级教程
全网爆火的 Jev 模型是什么?有什么用?怎么使用?怎么接入 AI 编程工具?效果真的好么?傻子可懂的 Jev 保姆级实战教程 + 项目实战测评来啦
5918 8
|
3天前
|
人工智能 测试技术 API
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
Jev是TypeSafe AI推出的“系统一模型”,不生成文本,专做毫秒级结构化决策:Choice(多选)、Score(打分)、Noul(是非概率)。响应快193倍、成本低444倍,适合工单路由、内容审核、测试定级等高频判断场景。
1071 2
最近全网爆火的 Jev 到底是什么?适合干什么、怎么用,一篇讲透!
|
17天前
|
人工智能 自然语言处理 安全
阿里云千问办公 QwenWork详细介绍:产品核心能力、典型场景、价格及常见问题解答
千问办公是阿里云推出的一站式AI办公平台,主打"不止于对话,更注重交付",依托通义千问旗舰大模型,用户一句话即可完成数据分析、PPT生成、视频剪辑等复杂任务,直接输出可用成果。产品深度打通钉钉生态与企业OA,覆盖桌面端、网页端,提供企业标准版198元/人/月等多档订阅方案,新用户注册即赠2000积分,适配工程师、HR、财务等多职业办公场景,成为能动手干活的"全能AI同事"。
3259 10
|
3天前
|
人工智能 并行计算 PyTorch
秋叶 ComfyUI 2026 整合包 v3.2 完整部署教程:Python 3.13 + Torch 2.13 全栈升级
秋叶aaaki ComfyUI 2026年8月整合包v3.2正式发布!全面升级Python 3.13.11、PyTorch 2.13.0+cu130及ComfyUI v0.30.2,原生支持MiniMax H3、Wan 2.2、Qwen-Image-2.1等2026主流音视频/图像模型,解压即用,无需环境配置。
514 2
|
16天前
|
IDE 开发工具
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
Qoder国际版上线全新内置大模型Sonus(/ˈsoʊnəs/),全球领先,专精超长任务执行与电脑操作(Computer Use)。配合Qoder桌面端0.2.3版本,可自主完成编程、金融建模、科研及表格制作等复杂工作。现全面支持Qoder全系产品,效率提升3.2倍。
1826 8
Qoder 上线 Sonus 模型,Computer Use 能力全面增强
|
11天前
|
缓存 IDE Java
【保姆级】Android Studio下载、安装和汉化教程(2026最新)
Android Studio 是 Google 官方推出的免费 Android 应用开发集成环境,基于 IntelliJ IDEA,内置模拟器、调试器、性能分析及 Compose 界面工具,功能全面,文档丰富,是安卓开发首选工具。(239字)
1245 1

热门文章

最新文章