互換性
Pusher 互換のリアルタイムバックエンド
PushCaster は回線上で Pusher Channels プロトコルのバージョン 7 を話します。移行は設定であって、書き直しではありません。このページは、変わるものの正確な一覧です。
アプリケーションの書き換えは不要です。接続設定の変更だけで済みます。 アプリケーションあたり 3〜6 行。Laravel なら .env を書き換えるだけです。drop-in でも zero-config でもありません。ホストは設定する必要があり、認証情報は新しくなります。
変わらないもの
回線、ライブラリ、認証ハンドシェイク
ここでいう互換性は似ているという意味ではなく、プロトコルそのものです。リクエスト/レスポンスの形式、イベントの意味、認証方式が互換です。
| 領域 | 変わらないもの |
|---|---|
| プロトコル | 回線上の 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 自体に手を加える必要はありません。
| SDK | テストしたバージョン |
|---|---|
| pusher-js (browser) | 8.6.0 |
| pusher/pusher-php-server | 7.3.0 |
| pusher (Node.js) | 5.3.4 |
| pusher (Python) | 3.3.4 |
| pusher-http-go | v5.1.1 |
| pusher (Ruby) | 2.1.1 |
| laravel/framework (Echo) | ^13.0 |
変わるもの
ホストと、認証情報
pusher-js は wsHost を渡さないかぎり ws-<クラスター>.pusher.com を埋め込んだままで、サーバーライブラリはホストを渡さないかぎり既定で api-<クラスター>.pusher.com へ向かいます。この 2 つを上書きすることが、移行のすべてです。
const pusher = new Pusher(APP_KEY, {- cluster: 'eu',+ wsHost: 'ws-eu1.pushcaster.io',+ wsPort: 443,+ forceTLS: true, })言語ごとの、変更の全文
// 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・シークレットは新しくなります。 既存の認証情報は引き継がれません。同時にクラスターも選んでください。クラスターはホストの一部です。
既知の相違点
同じではない 3 つのこと
互換性の主張は、その例外と一緒でなければ役に立ちません。この 3 つは設計判断を変えうるものです。
クラスタは 1 つ、フェデレーションはなし
クラスタは地理的なヒントではなく分離の境界です。専用のノード、NATS、Redis を持ち、クラスタ間の配信はありません。アプリケーションはちょうど 1 つのクラスタに属するため、互いに通信する必要がある 2 つは同じクラスタに置いてください。
ホストはクラスタ名ではありません
cluster: "eu" だけでは PushCaster には届きません。クライアントで wsHost を、サーバーライブラリで host を設定します。3 つのオプションの変更で、どの移行でも必ず行います。
統計 API はありません
Pusher のダッシュボード統計エンドポイントに相当するものはここにはありません。使用量は当社の API から、運用メトリクスは Prometheus から取得します。公式のサーバー SDK はそのエンドポイントを呼び出さないため、影響を受けるのはアプリケーションではなくツール類です。
移行
まず private と presence のチャンネルを試す
何かが間違っていても public チャンネルは通ってしまいます。あなたのサーバーに何も尋ねないからです。古いホストや合わないシークレットが表に出るのは、private と presence のサブスクリプションのときだけです。
- 01アプリケーションを作る選んだクラスターは、これから設定するすべてのホストの一部です。
- 02ホストを両方に設定するクライアントには wsHost が、サーバーにはホストが必要です。どちらかを忘れると、アプリケーションの半分は Pusher と話し続けます。
- 03認証情報を入れ替える3 つは同時に変わります。新しい key と古いシークレットの組み合わせは署名付きサブスクリプションでしか失敗しません。だからこそ、ざっと動作確認しただけでは生き残ってしまいます。
- 04private チャンネルを subscribe するPOST /pusher/auth が実際に動き、secret が app id と対になっていることが確かめられます。
- 05presence チャンネルに参加するメンバー一覧と、参加・離脱のイベントが確かめられます。
- 06サーバーから publish するpublish のホストと署名が、端から端まで確かめられます。