Pusher:托管式双向实时通信服务,提供频道、事件和 webhook 通知的基础设施。它使开发者无需部署自己的 WebSocket 服务器,并确保消息送达数百万台设备。根据 Pusher 官方文档 (2025),该服务每月在全球处理超过 400 亿条消息。
要点
Pusher — 成立于 2011 年的双向实时通信云服务。它提供现成的基础设施,用于在无需管理自己的 WebSocket 服务器的情况下实时发送和接收消息。Pusher 用于构建聊天、实时通知、协同编辑和游戏排行榜。
与需要部署和维护自己服务器的 Socket.IO 等库不同,Pusher 采用 SaaS(软件即服务)模式。开发者注册后获得密钥(app_id、key、secret),并使用 Pusher REST API 发布事件。服务器基础设施完全由 Pusher 平台管理。
根据 Pusher 官方博客 (2025),该平台为全球超过 250,000 个活跃项目提供服务。知名客户包括 GitHub(实时通知)、Trello(看板同步)和 Intercom(支持聊天)。Pusher 支持美国、欧洲和亚洲的数据中心以最大程度减少延迟。
Pusher 成立于 2011 年,是最早的 WebSocket 托管服务之一。2014 年,该公司推出了 Pusher Channels — 当前支持 private 和 presence 频道的架构。2017 年,增加了对服务器端事件 webhook 的支持。2022 年,Pusher 推出了 Pusher Beams — 面向移动平台的推送通知服务。
Pusher 架构与自托管解决方案的区别在于,所有订阅处理、连接管理和事件路由都在 Pusher Cloud 端进行。开发者仅通过自己的后端管理 private 频道的认证。
Pusher 架构基于发布者-订阅者模型。服务器应用程序通过 Pusher REST API 发布事件,客户端应用程序通过永久的 WebSocket 连接接收事件。Pusher 充当发布者和订阅者之间的中介。
当服务器通过 POST 请求向 Pusher API 发送事件时,平台确定目标频道并将消息广播给订阅该频道的所有客户端。客户端通过已打开的 WebSocket 连接接收事件,根据地理位置不同,延迟为 50–100 毫秒。
每个客户端通过 Pusher Client SDK 建立连接,SDK 自动选择传输方式(WebSocket — 优先,HTTP long-polling — 回退)。SDK 在无需开发者干预的情况下管理重新连接、数据序列化和错误处理。根据 Pusher 技术文档 (2025),网络中断时的重新连接时间不到 1 秒。
系统由三个组件组成:Pusher Server API(用于发布事件的 REST 端点)、Pusher Client SDK(用于订阅事件的库)和 Pusher WebHook(关于连接/断开事件的服务器通知)。所有组件异步且独立工作。
Pusher Channels支持三种类型的频道,每种类型适用于不同的使用场景。频道类型的选择决定了访问级别、认证机制和可用功能。
| 频道类型 | 前缀 | 认证 | 用途 |
|---|---|---|---|
| Public | channel- | 不需要 | 公共数据:汇率、天气、新闻源 |
| Private | private- | 在服务器上签名请求 | 个人通知、聊天、用户数据 |
| Presence | presence- | 签名 + 用户信息 | 在线状态、游戏房间、协同编辑 |
Public 频道无需认证即可供所有客户端访问,适用于广播数据。Private 频道需要通过开发者服务器进行认证:客户端向其后端发送包含 socket_id 和 channel_name 的请求,服务器使用 Pusher 密钥签名请求并返回 auth 令牌。Presence 频道额外传输用户信息(user_id、user_info),并允许跟踪谁在线。
根据 Pusher 文档 (2025),每个频道最大同时连接客户端数量为 10,000(public 和 private 频道)。对于 presence 频道,限制为每个频道 10,000 用户,每个应用最多支持 100,000 用户。
Pusher 事件模型基于在频道中发布的命名事件。每个事件都有名称(最多 200 个字符)、JSON 格式的数据和可选的 socket_id,用于排除向事件发起者的重复发送。
触发器 — 是向 Pusher API 发送的 HTTP POST 请求,用于在频道中发布事件。请求格式:POST /apps/{app_id}/events,包含 channel、name 和 data。Pusher Server API 通过官方库(PHP、Ruby、Python、Go、Java、Node.js)支持来自任何服务器环境的触发器。
Pusher 支持 批量触发器 — 通过一个请求在多个频道中发布一个事件。这比顺序调用更高效,并保证交付的原子性。根据 Pusher 性能测试 (2024),100 个频道的批量触发器需要 30–50 毫秒,而顺序调用需要 2–5 秒。
Pusher WebHook 使您的服务器能够接收有关基础设施事件的通知:客户端连接、断开、错误发生。Webhook 请求使用 HMAC-SHA256 签名以进行验证。这对于日志记录、分析和状态同步至关重要。
Pusher 集成包括两部分:服务器端(发布事件)和客户端(订阅事件)。我们来看一个服务器端使用 Node.js 和客户端使用 JavaScript 的示例。首先,您需要在 Pusher 仪表板中创建应用程序并获取凭证。
根据 Pusher 文档 (2025),基础计划(Sandbox)包括最多 100 个并发连接和每天 200,000 条消息 — 足够开发和测试使用。生产计划从每月 $49 起,提供 1000 个连接。
const Pusher = require('pusher');
const pusher = new Pusher({
appId: 'YOUR_APP_ID',
key: 'YOUR_KEY',
secret: 'YOUR_SECRET',
cluster: 'eu',
useTLS: true
});
pusher.trigger('my-channel', 'my-event', {
message: 'Hello from server',
timestamp: Date.now()
}).then(() => {
console.log('事件已发布');
}).catch(console.error);
import Pusher from 'pusher-js';
const pusher = new Pusher('YOUR_KEY', {
cluster: 'eu',
forceTLS: true
});
const channel = pusher.subscribe('my-channel');
channel.bind('my-event', (data) => {
console.log('收到事件:', data);
displayNotification(data.message);
});
Pusher 提供 SDK 适用于 iOS(Swift)和 Android(Java/Kotlin),完全复制了 JavaScript 客户端的全部功能。移动 SDK 支持相同的频道类型、认证机制和事件模型。React Native 可通过 JavaScript 桥使用 pusher-js 包。
在移动设备上,Pusher SDK 使用指数退避重新连接机制自动处理 Wi-Fi 和移动网络之间的切换。这对于 iOS 应用尤其重要,因为 iOS 可能在后台运行时强制关闭 WebSocket 连接。
根据 Pusher 技术博客 (2024),在没有活动事件的情况下,一个 Pusher 连接的平均流量消耗为每分钟 1–2 KB。这是通过优化后的心跳协议(间隔 30 秒)实现的。中型应用可以支持多达 1000 个并发 Pusher 连接,而不会显著影响电池消耗。
Pusher Beams — 通过 APNs(iOS)和 FCM(Android)向移动设备发送推送通知的附加服务。Beams 与 Pusher Channels 集成:频道中的事件可以在客户端离线时自动触发推送通知。这解决了应用关闭时的消息传递问题。
Pusher 安全性在多个层面实施。每个对 Pusher API 的请求都使用 app_secret 通过 HMAC-SHA256 签名。这确保只有经过授权的服务器才能发布事件。客户端 SDK 使用 app_key 标识应用程序,但访问 private 和 presence 频道需要额外认证。
Private 频道认证分三步进行:客户端调用 pusher.subscribe('private-channel'),Pusher Client SDK 向您的后端端点(/pusher/auth)发送 HTTP 请求,服务器检查用户权限并返回由密钥签名的 auth 令牌。Pusher 验证签名并允许订阅。
建议对所有请求使用 TLS 连接(在 SDK 中设置 useTLS: true)。Pusher 还支持对 REST API 的服务器请求进行基于 IP 地址的访问限制。企业套餐支持 VPC(虚拟私有云)和具有隔离基础设施的专用集群。
常见问题
Pusher — 是托管服务(SaaS),无需管理服务器。Socket.IO — 是需要自行部署的库。Pusher 设置更简单,但扩展时更贵。Socket.IO 需要 DevOps 工作,但大容量时更便宜。
免费 Sandbox 计划包括 100 个连接和每天 200,000 条消息。生产计划从每月 $49(1000 个连接,无限消息)起,企业版可定制条件。
Pusher 使用 WebSocket 并自动回退到 HTTP long-polling。对于关键消息,Pusher 端提供队列,保证至少一次传递(at-least-once)。
可以,Pusher 可通过 欧洲集群(eu)从俄罗斯访问。欧洲数据中心的延迟为 50–100 毫秒。对于有数据本地化要求的项目,建议考虑替代方案。
主要竞争对手有 Ably(类似功能,更灵活的定价)、PubNub(全球交付网络)、Socket.IO(自托管)和 Firebase Realtime Database(Google 生态系统)。
总结
我们将开发一款交钥匙移动应用程序
IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。