本文へスキップ

互換性

Pusher 互換のリアルタイムバックエンド

PushCaster は回線上で Pusher Channels プロトコルのバージョン 7 を話します。移行は設定であって、書き直しではありません。このページは、変わるものの正確な一覧です。

アプリケーションの書き換えは不要です。接続設定の変更だけで済みます。 アプリケーションあたり 3〜6 行。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 eventprivate と 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 へ向かいます。この 2 つを上書きすることが、移行のすべてです。

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・シークレットは新しくなります。 既存の認証情報は引き継がれません。同時にクラスターも選んでください。クラスターはホストの一部です。

既知の相違点

同じではない 3 つのこと

互換性の主張は、その例外と一緒でなければ役に立ちません。この 3 つは設計判断を変えうるものです。

  • クラスタは 1 つ、フェデレーションはなし

    クラスタは地理的なヒントではなく分離の境界です。専用のノード、NATS、Redis を持ち、クラスタ間の配信はありません。アプリケーションはちょうど 1 つのクラスタに属するため、互いに通信する必要がある 2 つは同じクラスタに置いてください。

  • ホストはクラスタ名ではありません

    cluster: "eu" だけでは PushCaster には届きません。クライアントで wsHost を、サーバーライブラリで host を設定します。3 つのオプションの変更で、どの移行でも必ず行います。

  • 統計 API はありません

    Pusher のダッシュボード統計エンドポイントに相当するものはここにはありません。使用量は当社の API から、運用メトリクスは Prometheus から取得します。公式のサーバー SDK はそのエンドポイントを呼び出さないため、影響を受けるのはアプリケーションではなくツール類です。

移行

まず private と presence のチャンネルを試す

何かが間違っていても public チャンネルは通ってしまいます。あなたのサーバーに何も尋ねないからです。古いホストや合わないシークレットが表に出るのは、private と presence のサブスクリプションのときだけです。

  1. 01アプリケーションを作る選んだクラスターは、これから設定するすべてのホストの一部です。
  2. 02ホストを両方に設定するクライアントには wsHost が、サーバーにはホストが必要です。どちらかを忘れると、アプリケーションの半分は Pusher と話し続けます。
  3. 03認証情報を入れ替える3 つは同時に変わります。新しい key と古いシークレットの組み合わせは署名付きサブスクリプションでしか失敗しません。だからこそ、ざっと動作確認しただけでは生き残ってしまいます。
  4. 04private チャンネルを subscribe するPOST /pusher/auth が実際に動き、secret が app id と対になっていることが確かめられます。
  5. 05presence チャンネルに参加するメンバー一覧と、参加・離脱のイベントが確かめられます。
  6. 06サーバーから publish するpublish のホストと署名が、端から端まで確かめられます。

アプリケーションを作って、クライアントを 1 つ向けてみてください。

Pusher は各権利者の商標です。PushCaster は独立したサービスであり、Pusher との提携も、Pusher による承認も受けていません。ライブラリ名は説明のために用いています。

Support