跳到正文

兼容性

一个兼容 Pusher 的实时后端

PushCaster 在线上说的是 Pusher Channels 协议第 7 版。搬过来是改配置,不是重写——而这一页就是会变的东西的确切清单。

不需要重写应用。只需修改连接配置。 每个应用三到六行;如果是 Laravel,改一处 .env 就完了。既不是 drop-in 也不是 zero-config:主机必须设,凭据也是新的。

哪些保持不变

线上协议、库,以及认证握手

这里说的兼容指的是协议本身,而不是相像——兼容的请求/响应格式、事件语义和认证方案。

从 Pusher Channels 迁到 PushCaster 时不会变的东西
方面不会变的
协议线上的 Pusher Channels 协议第 7 版。
客户端库pusher-js、Laravel Echo 和官方移动端库,均未修改。
服务端库pusher-php-server、pusher-http-node,以及 Python、Go、Ruby 和 Java 的库。
签名兼容的签名与规范化方案。
频道的种类public、private、presence 和 private-encrypted,前缀也一样。
订阅鉴权POST /pusher/auth 的请求和响应形状原样保留。
client event在 private 和 presence 频道上的订阅者之间,一如从前。
Webhook字段名和头都一样,包括 channel_occupied、member_added 和 cache_miss。

已测试的 SDK 版本

与所列 Pusher SDK 版本兼容,无需修改这些 SDK。

兼容性测试套件所针对的 Pusher SDK 版本
SDK测试版本
pusher-js (browser)8.6.0
pusher/pusher-php-server7.3.0
pusher (Node.js)5.3.4
pusher (Python)3.3.4
pusher-http-gov5.1.1
pusher (Ruby)2.1.1
laravel/framework (Echo)^13.0

哪些会变

主机,以及凭据

pusher-js 在没给 wsHost 时会写死 ws-<集群>.pusher.com,服务端库在没给主机时默认走 api-<集群>.pusher.com。把这两处改掉,就是整个迁移。

src/realtime.tsunified diff
const pusher = new Pusher(APP_KEY, {
- cluster: 'eu',
+ wsHost: 'ws-eu1.pushcaster.io',
+ wsPort: 443,
+ forceTLS: true,
})

按语言列出的完整改动

client.js
js
// before — talking to Pushernew Pusher(KEY, { cluster: 'eu' })// after — talking to PushCaster (the key & secret are new)new Pusher(KEY, {  wsHost: 'ws-eu1.pushcaster.io',  wsPort: 443,  forceTLS: true,})

设主机这一步最容易漏。 如果留着默认值,库就会去和 Pusher 的服务器说话,而报出来的错会指向 key 不对,而不是目的地不对。

app id、key 和密钥都是新的。 原有凭据不会沿用。顺手把集群也选了——它是主机的一部分。

已知差异

三处并不相同的地方

兼容性的说法,只有连着它的例外一起看才有用。这三处足以改变一个设计决定。

  • 一个集群,没有联邦

    集群是隔离边界,不是地理提示:它有自己的节点、NATS 和 Redis,集群之间不会互相投递。一个应用只属于一个集群,所以需要互相通信的两个应用应放在同一个集群里。

  • host 不是集群名

    只写 cluster: "eu" 到不了 PushCaster。你需要在客户端设置 wsHost,在服务端库设置 host。这是三个选项的改动,每次迁移都要做。

  • 没有统计 API

    Pusher 控制台的统计接口在这里没有对应物。用量来自我们自己的 API,运维指标来自 Prometheus。没有任何官方服务端 SDK 会调用那个接口,所以受影响的是你的工具链,而不是你的应用。

迁移

先测 private 和 presence 频道

就算有什么不对,public 频道照样能通过——它们什么也不问你的服务器。过期的主机或者对不上的密钥,只会在 private 和 presence 的订阅上现形。

  1. 01创建应用你选的集群是接下来每一个主机的组成部分。
  2. 02两处都要设主机客户端需要 wsHost,服务端需要主机。漏掉任何一处,你应用的一半仍然在和 Pusher 说话。
  3. 03换掉凭据三样是一起换的。新 key 配旧密钥只会在带签名的订阅上失败——所以它能从一次草草的冒烟测试里活下来。
  4. 04subscribe 一个 private 频道这会真正跑一遍 POST /pusher/auth,并证明 secret 与 app id 是配对的。
  5. 05加入一个 presence 频道这会确认成员列表以及加入和离开的事件。
  6. 06从服务器 publish 一次这会端到端确认 publish 的主机和签名。

建一个应用,把一个客户端指过去。

Pusher 是其各自权利人的商标。PushCaster 是独立服务,与 Pusher 无从属关系,也未获其背书。库名仅作描述之用。

Support