クライアントの接続方法
ストリーミング API は HTTP/1.1 要求-応答モデルと Bayeux プロトコル (CometD 実装) を使用します。Bayeux クライアントは複数の段階でストリーミング API に接続します。
- ハンドシェイク要求を送信する。
- チャネルに登録要求を送信する。
- long polling を使用して接続する。
クライアントは、長命 (long-lived) 接続を維持しながら、サーバからイベントを受信します。
- クライアントがイベントを受信すると、次のイベントのセットを受信するためにすぐに再接続する必要があります。40 秒以内に再接続しないと、サーバが登録を期限切れにし、接続が終了します。クライアントは、ハンドシェイクと登録を最初からやり直す必要があります。
- イベントが生成されずにクライアントが待機しているときにサーバが接続を閉じた場合、クライアントは 110 秒以内に再接続する必要があります。Bayeux サーバは、advice 項目に 110 秒の再接続期限が含まれる応答をクライアントに送信します。クライアントがこの指定時間内に再接続しないと、サーバはクライアントの CometD セッションを削除します。
- 長命 (long-lived) 接続が予期しないネットワークの中断により失われた場合、CometD は再接続を試みます。この再接続が成功した場合、この新しい接続では、再ハンドシェイクにより前の登録者が削除されているため、クライアントは再登録する必要があります。クライアントは、meta/handshake メタチャネルをリスンして、接続が失われて再確立されたときに通知を受信することができます。
- クライアント認証は無効になることがあります。たとえば、Salesforce システム管理者が OAuth トークンを取り消したり Salesforce セッションを無効にした場合、クライアント認証が無効にな��ます。ストリーミング API は、110 秒ごとにクライアント認証を検証します。クライアント認証が無効な場合、クライアントにエラーが通知されます。401::Authentication invalid のエラー値と reconnect=none の advice 項目を含む Bayeux メッセージが /meta/connect チャネルで送信されます。エラー通知を受信したクライアントが新規イベントを受信するには、再認証と再接続が必要です。エラー応答メッセージは次のようになります。
1{ 2 clientId=1q1ib66fvm7kli1gfoauu95i78g, 3 advice={reconnect=none, interval=0}, 4 channel=/meta/connect, 5 id=7, 6 error=401::Authentication invalid, 7 successful=false 8}
これらの手順の詳細は、「Bayeux プロトコル、CometD、および long polling」を参照してください。