PubNub — 一个全球性的实时消息网络,通过WebSocket提供发布和订阅消息的基础设施,具有最低延迟。它面向需要在高负载和不稳定连接条件下可靠交付数据的应用程序。根据PubNub官方文档(2025年),该平台每月处理超过1万亿条消息,服务于全球70,000多个应用程序。
关键要点
PubNub — 成立于2010年的全球实时数据传输网络。它提供用于发布和订阅消息的API,以及附加服务:历史记录存储、在线状态管理、无服务器函数(PubNub Functions)和数据流分析。
PubNub的架构基于分布式存在点网络(POP),分布在15+地理区域。每个点包含缓存代理,以最低延迟在发布者和订阅者之间路由消息。PubNub不使用单一中央代理 — 每个区域独立运行并通过全球网络同步。
根据PubNub官方网站(2025年),该平台服务于200多个国家的70,000多个应用程序。主要客户包括Logitech(物联网设备管理)、GoPro(实时视频流)、eBay(拍卖同步)和Snapchat(聊天和通知)。
PubNub建立在三个原则之上:速度(单个区域内第95百分位延迟低于10毫秒)、可靠性(自动重试的至少一次交付保证)和可扩展性(无频道数量限制的水平扩展)。平台不长期存储消息 — 可通过单独连接的Storage & Playback服务访问历史记录。
PubNub的工作模型基于经典的发布-订阅模式。发布者客户端通过PubNub REST API使用publish密钥向指定频道发送消息。PubNub通过订阅者活跃的WebSocket连接将消息传递给该频道的所有订阅者。订阅者通过PubNub SDK中注册的回调处理程序接收消息。
传输层 PubNub使用WebSocket作为主要协议,对于受限环境回退到HTTP长轮询。SDK自动管理连接:建立、维持心跳(每15-60秒取决于网络)并在断开时重新连接。
PubNub中的每条消息包含元数据:发送者的UUID、时间戳、序列号(timetoken)和标志(store、replicate、eatAfterRead)。Timetoken — 基于时间的唯一PubNub标识符,保证频道中消息的全局顺序。根据PubNub文档(2025年),timetoken的分辨率为10纳秒。
当客户端发布消息时,消息经过Stream Controller — PubNub的路由模块。Stream Controller检查访问权限(PAM)、应用转换规则(PubNub Functions)、确定目标区域并将消息发送给所有订阅者。如果订阅者断开连接,消息将缓冲30秒(默认),等待连接恢复。
PubNub密钥系统将访问权限分为三个级别:publish密钥(仅发布)、subscribe密钥(仅订阅)和secret密钥(管理)。每个应用程序在注册时获得一组三个密钥,但secret密钥从不传递给客户端 — 仅在服务器端使用。
Publish密钥用于向频道发送消息。Subscribe密钥 — 用于订阅频道和接收消息。Secret密钥 — 用于通过PubNub Access Manager(PAM)管理访问、创建临时受众令牌和管理密钥。Secret密钥安全地存储在服务器上,永不向客户端公开。
PubNub支持多种身份验证模式:按IP地址(适用于服务器)、按密钥(适用于管理操作)、按临时令牌(适用于客户端)。临时令牌通过PAM颁发,具有时间、频道和权限(read、write、manage)限制。
PubNub频道 — 用于消息的命名路由。频道名称是最多92个字符的字符串,支持拉丁字母、数字、连字符和下划线。频道在首次发布或订阅时动态创建。PubNub通过订阅请求中的*符号支持频道模式 — 这允许订阅一组频道(例如,user-*)。
Channel Groups — 用于批量订阅的频道分组机制。客户端不再订阅50个单独的频道,而是订阅一个组,组内所有频道的消息自动传递给客户端。Channel Groups支持嵌套,但深度不应超过3层。
根据PubNub技术文档(2025年),每个频道的最大订阅者数为50,000。对于更高负载,建议使用带前缀的频道并对受众进行分片(例如,chat-room-001、chat-room-002)。Channel Groups也可以按地理或主题原则进行组织。
| 参数 | 最大值 | 备注 |
|---|---|---|
| 频道名称长度 | 92个字符 | 拉丁字母、数字、-、_ |
| 每频道订阅者 | 50,000 | 更多 — 分片 |
| Channel Groups | 2000组/密钥 | 每组最多500个频道 |
| 历史记录(存储) | 无限制 | 按存储量付费 |
集成PubNub需要注册、在管理面板中创建应用程序以及获取一组密钥。PubNub库适用于JavaScript、Swift、Kotlin、Java、Dart(Flutter)、C#、Python、Ruby、Go等多种语言。让我们看一个适用于浏览器和Node.js的JavaScript示例。
根据PubNub文档(2025年),pubnub-js库同时支持CommonJS和ES Module导入。对于浏览器,建议通过npm安装,然后通过webpack或vite进行打包。
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'PUBLISH_KEY',
subscribeKey: 'SUBSCRIBE_KEY',
userId: 'user-100'
});
pubnub.subscribe({
channels: ['chat-general']
});
pubnub.addListener({
message: (event) => {
console.log('新消息:', event.message);
},
presence: (event) => {
console.log('在线状态:', event.uuid, event.action);
}
});
pubnub.publish({
channel: 'chat-general',
message: { text: 'Hello everyone!', sender: 'user-100' }
});
pubnub.fetchMessages(
{ channels: ['chat-general'], count: 50 },
(status, response) => {
if (status.error) {
console.error('获取历史记录时出错', status);
return;
}
const messages = response.channels['chat-general'];
messages.forEach((msg) => {
console.log(msg.message, msg.timetoken);
});
}
);
PubNub Functions — 用于在PubNub端处理消息的无服务器平台。函数用JavaScript编写,在安全的隔离环境(V8 isolate)中执行。它们可以在消息传递给订阅者之前对其进行转换、过滤、缓冲和重定向。
Stream Controller — 内置路由机制,基于规则管理消息流。规则确定哪些消息被传递、哪些被丢弃以及哪些被路由到PubNub Functions进行处理。Stream Controller支持根据消息内容、频道类型或元数据进行条件路由。
根据PubNub博客(2024年),PubNub Functions将消息处理的服务器基础设施成本降低40-60%,因为过滤和转换逻辑在PubNub的边缘节点上执行,而不是在自己的服务器上。函数可以访问HTTP请求、Key-Value存储以及同一空间中的其他函数。
适用于移动平台的PubNub SDK适用于iOS(Swift)、Android(Kotlin/Java)、Flutter(Dart)和React Native(JavaScript)。移动SDK支持完整功能集:发布/订阅、在线状态、历史记录、PAM和PubNub Functions。对于推送通知,PubNub通过特殊的移动推送网关机制与APNs和FCM集成。
移动设备优化包括自适应心跳、批量消息处理和后端模式支持。适用于iOS的PubNub SDK使用Background Task API在应用程序最小化时保持连接(最多30秒标准后台时间)。更长的后台工作需要推送通知。
Mobile Push Gateway — 通过PubNub发送推送通知的机制。当消息发布到频道时,PubNub自动确定哪些订阅者离线,并通过APNs(iOS)或FCM(Android)向他们发送推送通知。配置在管理面板中一次性完成 — 此后,频道中的所有消息自动复制到推送频道。根据PubNub文档(2025年),网关每秒处理多达10,000条推送通知。
常见问题
PubNub提供更多SDK(75+平台)、内置无服务器函数和用于消息处理的Stream Controller。Pusher设置更简单,但PubNub在路由和数据转换方面提供更多控制。
PubNub使用至少一次机制,在出错时自动重试。每条消息都有唯一的timetoken用于去重。消息为离线订阅者缓冲30秒。
免费计划包括100个同时连接和每月100万条消息。付费计划起价49美元/月,提供1000个同时连接和无限消息数。
是的,PubNub对所有连接支持TLS 1.3,以及通过PAM进行密钥管理的客户端端到端加密(AES-256)。企业客户可使用Cipher Key模式。
PubNub为75+平台提供SDK,包括JavaScript、Swift、Kotlin、Java、Dart、C#、Python、Ruby、Go、C++、PHP、Rust和Objective-C。这是实时服务中最大的生态系统。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。