PubNub — 是什么,实时SDK及其在应用程序中的工作原理

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

PubNub — 一个全球性的实时消息网络,通过WebSocket提供发布和订阅消息的基础设施,具有最低延迟。它面向需要在高负载和不稳定连接条件下可靠交付数据的应用程序。根据PubNub官方文档(2025年),该平台每月处理超过1万亿条消息,服务于全球70,000多个应用程序。

关键要点

  • PubNub — 拥有15+数据中心和保证交付的全球实时消息网络。
  • 带密钥的Pub/Sub — 通过publish/subscribe密钥进行发布和订阅,访问权限分离。
  • Stream Controller — 支持过滤、转换和缓冲的消息流管理。
  • Presence — 通过超时检测跟踪频道参与者的在线状态。
  • 支持75+平台的SDK — 实时服务中最大的客户端库生态系统。

什么是PubNub?

PubNub — 成立于2010年的全球实时数据传输网络。它提供用于发布和订阅消息的API,以及附加服务:历史记录存储、在线状态管理、无服务器函数(PubNub Functions)和数据流分析。

PubNub的架构基于分布式存在点网络(POP),分布在15+地理区域。每个点包含缓存代理,以最低延迟在发布者和订阅者之间路由消息。PubNub不使用单一中央代理 — 每个区域独立运行并通过全球网络同步。

根据PubNub官方网站(2025年),该平台服务于200多个国家的70,000多个应用程序。主要客户包括Logitech(物联网设备管理)、GoPro(实时视频流)、eBay(拍卖同步)和Snapchat(聊天和通知)。

PubNub的关键原则

PubNub建立在三个原则之上:速度(单个区域内第95百分位延迟低于10毫秒)、可靠性(自动重试的至少一次交付保证)和可扩展性(无频道数量限制的水平扩展)。平台不长期存储消息 — 可通过单独连接的Storage & Playback服务访问历史记录。

PubNub的工作原理

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

PubNub密钥系统将访问权限分为三个级别:publish密钥(仅发布)、subscribe密钥(仅订阅)和secret密钥(管理)。每个应用程序在注册时获得一组三个密钥,但secret密钥从不传递给客户端 — 仅在服务器端使用。

Publish密钥用于向频道发送消息。Subscribe密钥 — 用于订阅频道和接收消息。Secret密钥 — 用于通过PubNub Access Manager(PAM)管理访问、创建临时受众令牌和管理密钥。Secret密钥安全地存储在服务器上,永不向客户端公开。

PubNub支持多种身份验证模式:按IP地址(适用于服务器)、按密钥(适用于管理操作)、按临时令牌(适用于客户端)。临时令牌通过PAM颁发,具有时间、频道和权限(read、write、manage)限制。

PubNub频道

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 Groups2000组/密钥每组最多500个频道
历史记录(存储)无限制按存储量付费

如何在项目中使用PubNub

集成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进行打包。

订阅频道

js
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' }
});

获取消息历史记录

js
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和Stream Controller

PubNub Functions — 用于在PubNub端处理消息的无服务器平台。函数用JavaScript编写,在安全的隔离环境(V8 isolate)中执行。它们可以在消息传递给订阅者之前对其进行转换、过滤、缓冲和重定向。

Stream Controller — 内置路由机制,基于规则管理消息流。规则确定哪些消息被传递、哪些被丢弃以及哪些被路由到PubNub Functions进行处理。Stream Controller支持根据消息内容、频道类型或元数据进行条件路由。

根据PubNub博客(2024年),PubNub Functions将消息处理的服务器基础设施成本降低40-60%,因为过滤和转换逻辑在PubNub的边缘节点上执行,而不是在自己的服务器上。函数可以访问HTTP请求、Key-Value存储以及同一空间中的其他函数。

PubNub在移动应用程序中

适用于移动平台的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与Pusher有何不同?

PubNub提供更多SDK(75+平台)、内置无服务器函数和用于消息处理的Stream Controller。Pusher设置更简单,但PubNub在路由和数据转换方面提供更多控制。

PubNub如何保证消息传递?

PubNub使用至少一次机制,在出错时自动重试。每条消息都有唯一的timetoken用于去重。消息为离线订阅者缓冲30秒。

PubNub的费用是多少?

免费计划包括100个同时连接和每月100万条消息。付费计划起价49美元/月,提供1000个同时连接和无限消息数。

PubNub是否支持加密?

是的,PubNub对所有连接支持TLS 1.3,以及通过PAM进行密钥管理的客户端端到端加密(AES-256)。企业客户可使用Cipher Key模式。

PubNub SDK支持哪些语言?

PubNub为75+平台提供SDK,包括JavaScript、Swift、Kotlin、Java、Dart、C#、Python、Ruby、Go、C++、PHP、Rust和Objective-C。这是实时服务中最大的生态系统。

总结

  • PubNub — 拥有15+数据中心和75+平台支持的全球实时消息网络。
  • 密钥系统 publish/subscribe/secret + PAM提供灵活的访问权限管理。
  • PubNub Functions允许在没有自有服务器基础设施的情况下进行无服务器消息处理。
  • Stream Controller在网络边缘节点管理消息的路由、过滤和转换。
  • Mobile Push Gateway通过APNs和FCM自动为离线订阅者发送推送。
  • 频道支持多达50,000个订阅者,Channel Groups简化了多个频道的管理。
  • 对于具有广泛平台支持和内置消息处理的项目,选择PubNub;对于更简单的场景,Pusher就足够了。

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

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

讨论项目

另请阅读