移动开发中的实时通信:定义、协议及工作原理

作者: IT Sectr 发布日期: 2026-06-02 阅读时间: 9 分钟

实时通信是现代移动应用程序不可或缺的一部分。根据Grand View Research(2025)的数据,实时技术市场到2030年将增长到520亿美元。WebRTC、WebSocket和Socket.IO是构建实时聊天、通话和通知的三大支柱。移动应用程序中的实时开发开启了即时通信的可能性。

要点

  • WebSocket — 用于双向数据交换的全双工协议。用于聊天、游戏、协作编辑器。
  • SSE(Server-Sent Events) — 从服务器到客户端的单向流。比WebSocket更简单,适用于新闻源和报价。
  • WebRTC — 用于点对点音频/视频通话的技术。需要STUN/TURN和信令服务器。
  • 实时平台(Socket.IO、Pusher、Ably、PubNub)简化了WebSocket集成并提供了现成的服务器端基础设施。
  • STUN确定设备用于P2P的外部IP。TURN在P2P不可行时中继流量。TURN更贵但更可靠。

实时通信:WebSocket、SSE和Long Polling协议

实时通信是能够在客户端和服务器之间以最小延迟交换数据的技术。主要协议:WebSocket、SSE(Server-Sent Events)、Long Polling和Short Polling。每种都有其应用领域:WebSocket用于双向通信,SSE用于通知,Long Polling作为旧版浏览器的回退。实时在移动开发中尤其重要:用户期望消息和通知的即时传递。移动开发中的通信正是基于这些协议构建的。

WebSocket vs SSE

WebSocket是全双工协议(客户端 ↔ 服务器)。握手(HTTP Upgrade)后连接保持打开状态。头部最小(2字节对比HTTP头部)。用于聊天(WhatsApp、Telegram)、游戏、实时交易。SSE是单向协议(服务器 → 客户端)。客户端订阅事件并通过单个HTTP连接接收它们。SSE更简单,更容易扩展(纯HTTP),适用于Twitter信息流、汇率、推送通知。

Long Polling是一种技术,客户端发出HTTP请求并保持打开状态,直到服务器发送数据或超时(30-60秒)。接收数据后,客户端立即打开新请求。Long Polling是WebSocket的回退。Short Polling — 客户端每N秒轮询服务器。最简单但低效(大多数请求返回空响应)。

信令服务器

在建立P2P连接之前,设备需要一个信令服务器 — 用于在对等方之间交换SDP提议和ICE候选项的中介服务器。信令可以通过WebSocket、SSE或任何其他协议实现。连接建立后,信令不再参与媒体流量传输。

WebRTC:通过音频和视频通话进行实时通信

WebRTC(Web Real-Time Communication)是一种用于P2P音频/视频/数据的开放技术。适用于浏览器和原生应用程序(iOS、Android)。WebRTC包括:getUserMedia(访问摄像头/麦克风)、RTCPeerConnection(P2P连接)、RTCDataChannel(数据传输)。WebRTC使移动应用程序中的实时通信成为可能 — 移动应用中的通信无需额外插件即可工作。

WebRTC流程

对等方A创建RTCPeerConnection和Offer SDP。步骤2:Offer通过信令服务器发送给对等方B。步骤3:对等方B接收Offer,创建Answer SDP并发送回。步骤4:两个对等方收集ICE候选项(用于连接的地址)并通过信令交换它们。步骤5:ICE框架选择最佳路径(P2P或通过TURN)。连接后 — 媒体流量直接流动。

SDP(Session Description Protocol)是描述连接参数(编解码器、IP地址、端口)的文本协议。ICE Candidate是来自STUN/TURN的提议:「可以在此地址找到我」。候选项越多,P2P的机会越大。

参数 Socket.IO Pusher Ably PubNub
类型库(带服务器)SaaSSaaSSaaS
协议WebSocket + HTTP回退WebSocketWebSocket + SSEWebSocket
免费限制无限制(自有服务器)20万条消息/天5万条消息/月100条消息/秒
全局复制否(自有服务器)是(7个区域)
交付保证ACK + 超时WebSocket(尽力而为)Exactly-onceAt-least-once
受欢迎程度非常高增长中

Socket.IO是初创公司的首选:您控制服务器,无限制。PusherAbly适用于不想管理基础设施的产品。PubNub适用于物联网和全球受众。IT Sectr推荐Socket.IO用于拥有自己后端的项目,Pusher用于快速原型,Ably用于有可靠性需求的企业。

平台:Socket.IO、Pusher、Ably、PubNub

实时平台为WebSocket和SSE提供现成的服务器基础设施。它们消除了编写自己的实时服务器、平衡WebSocket连接和扩展它们的需求。平台的选择取决于预算、可靠性要求和管理服务器的意愿。对于移动开发中的实时应用,平台提供现成的客户端SDK和基础设施。

Socket.IO

Socket.IO是用于Node.js和客户端(iOS、Android、Web)的库。基于WebSocket,但使用HTTP轮询作为回退。支持房间、命名空间、ACK确认。开发用 — socket.io-client-java(Android)和socket.io-client-swift(iOS)。由于自动重新连接,Socket.IO上的移动应用通信得到可靠处理。

Pusher和Ably

Pusher是一个实时SaaS平台。简单集成:创建频道并订阅事件。Pusher Channels用于通知,Pusher Beams用于推送通知。Ably是企业级,具有7个数据中心的全局复制。保证exactly-once交付。支持SSE、WebSocket、MQTT用于物联网。两个平台无需编写服务器代码即可解决移动开发中的通信任务。

实时基础设施:WebRTC中的STUN、TURN、信令

STUN(Session Traversal Utilities for NAT)是帮助设备发现NAT后面其外部IP和端口的服务器。设备发送STUN请求,服务器响应:「您可见为203.0.113.5:45678」。STUN免费使用(Google STUN:stun.l.google.com:19302)。在实时基础设施的背景下,STUN是建立P2P通道的第一步。

STUN vs TURN

TURN(Traversal Using Relays around NAT)是一个中继服务器,当P2P连接不可行时(例如,两个设备都在对称NAT后面),它中继媒体流量。TURN消耗服务器带宽,因此昂贵。在WebRTC中,ICE框架首先尝试P2P,然后TURN作为最后手段。通过企业网络连接时,移动应用中的通信需要TURN进行实时开发。

ICE(Interactive Connectivity Establishment)是一个框架,它收集所有可能的连接路径(本地IP、通过STUN的外部IP、TURN中继)并选择最佳路径。ICE Candidate是每条可能的路径。候选项越多,成功P2P的概率越高。

点对点

P2P是两个设备之间没有中介服务器的直接连接(用于媒体流量)。P2P减少延迟(<100毫秒)和服务器成本。缺点:NAT防护弱,需要STUN/TURN。WebRTC默认使用P2P。

P2P和ICE

点对点(P2P)是一种数据直接在设备之间传输的架构。在实时通信的背景下,P2P在WebRTC中用于最小化延迟。ICE(Interactive Connectivity Establishment)是找到P2P连接最佳路径的机制。对于开发,P2P是在移动应用中组织实时通信的最佳方式。

ICE如何工作

ICE收集三种类型的ICE Candidate:1)host(本地IP),2)srflx(通过STUN),3)relay(通过TURN)。所有候选项被排序,ICE按优先级顺序尝试与每个连接。第一个成功连接被使用。如果P2P不可行,则使用TURN(但成本高)。

常见问题

何时使用WebSocket,何时使用SSE?

WebSocket用于移动应用程序中的双向通信(聊天、游戏、协作编辑)。SSE用于从服务器到客户端的单向通知(新闻源、报价)。WebSocket更复杂,SSE更简单且更易扩展。

WebRTC中的STUN和TURN服务器是什么?

STUN是通过确定设备的外部IP和端口帮助建立直接P2P连接的服务器。TURN是当P2P不可行时(对称NAT后面)中继流量的中继服务器。TURN更贵,因为它消耗服务器带宽。

初创公司应该选择哪个实时平台?

Socket.IO适用于如果您有自己的服务器的简单聊天和通知。Pusher适用于无需服务器基础设施的快速启动。Ably适用于全局复制的企业需求。IT Sectr推荐Socket.IO作为移动开发中通信最灵活且免费的选择。

WebRTC中的信令服务器是什么?

信令服务器是一个中介服务器,两个设备通过它交换SDP提议和ICE候选项以建立WebRTC连接。交换后,媒体流量直接P2P流动,绕过信令。

Short Polling和Long Polling有什么区别?

Short Polling — 客户端以固定间隔持续轮询服务器(即使没有数据)。Long Polling — 客户端发出请求并等待服务器发送数据或超时。Long Polling更有效,但仍然不如WebSocket。

总结

  • WebSocket是移动应用中实时通信的主要协议。SSE用于来自服务器的单向通知。
  • WebRTC是用于P2P音频/视频通话的技术。需要信令服务器、STUN和可选的TURN。
  • Socket.IO是拥有自己服务器的初创公司的选择。Pusher和Ably是不需要服务器基础设施的SaaS解决方案。
  • STUN是用于确定外部IP的免费服务器。TURN是用于P2P不可行情况的付费中继。
  • ICE框架收集所有连接候选项并选择最佳路径(P2P > TURN)。
  • Long Polling和Short Polling是用于移动开发中通信的过时技术。仅作为回退使用。
  • 在建立P2P连接之前,需要信令服务器来交换SDP和ICE候选项。

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目