この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

クライアントの接続方法

ストリーミング API は HTTP/1.1 要求-応答モデルと Bayeux プロトコル (CometD 実装) を使用します。Bayeux クライアントは複数の段階でストリーミング API に接続します。
  1. CometD はハンドシェイク要求を送信します。
  2. ハンドシェイクが成功すると、/meta/handshake チャネルのカスタムリスナーはチャネルに登録要求を送信します。
  3. CometD は long polling を使用して接続を維持します。
CometD を使用した Salesforce へのクライアント接続シーケンス

クライアントは、長命 (long-lived) 接続を維持しながら、サーバーからイベントを受信します。CometD は、ハンドシェイク要求、接続要求、再接続要求を実行します。カスタムコードは、その他の操作 (登録など) を実行します。クライアントは、次の条件で再接続します。

イベント受信後
クライアントは、イベントを受信すると、次のイベントのセットを受信するために、CometD を使用してすぐに再接続する必要があります。40 秒以内に再接続しないと、サーバーが登録を期限切れにし、接続が終了します。クライアントは、カスタム /meta/handshake チャネルリスナーを使用して、ハンドシェイクと登録を最初からやり直す必要があります。
イベントが受信されなかったとき
イベントが生成されずにクライアントが待機しているときにサーバーが接続を閉じた場合、CometD は 110 秒以内に再接続する必要があります。Bayeux サーバーは、advice 項目に 110 秒の再接続期限が含まれる応答をクライアントに送信します。クライアントがこの指定時間内に再接続しないと、サーバーはクライアントの CometD セッションを削除します。
ネットワーク障害後
長命 (long-lived) 接続が予期しないネットワークの中断により失われた場合、CometD は再接続を試みます。この再接続が成功した場合、この新しい接続では、再ハンドシェイクにより前の登録者が削除されているため、クライアントは再登録する必要があります。クライアントは、/meta/handshake メタチャネルをリスンして、接続が失われて再確立されたときに通知を受信することができます。詳細は、CometD リファレンスドキュメント「Short Network Failures (短期間のネットワーク障害)」「Long Network Failures or Server Failures (長期間のネットワーク障害またはサーバー障害)」を参照してください。
無効な認証後
クライアント認証は無効になることがあります。たとえば、Salesforce システム管理者が OAuth トークンを取り消したり Salesforce セッションを無効にした場合、クライアント認証が無効になります。ストリーミング API は、クライアントが接続されている間は定期的に OAuth トークンまたはセッション ID を検証します。クライアント認証が無効な場合、クライアントは、401::Authentication invalid エラーと、reconnect=none を含む advice 項目によって通知されます。チャネルリスナーでエラー通知を受信したクライアントが新規イベントを受信するには、再認証と再接続が必要です。

無効なクライアント認証には Salesforce セッションの有効期限が含まれません。CometD クライアントでは、Salesforce セッションが期限切れになることはありません。クライアントが接続されている限り、Salesforce はタイムアウト期間を延長し続けます。

メモ

次の図は、認証エラーが発生した後に CometD クライアントが Salesforce に接続する方法を示しています。

CometD を使用したエラー処理を含む Salesforce へのクライアント接続シーケンス

これらの手順の詳細は、「Bayeux プロトコル、CometD、および long polling」を参照してください。

CometD メソッドの subscribe または connect をコールする場合などに、サーバーがクライアントから受け入れられる HTTP POST リクエストボディの最大サイズは、32,768 バイトです。要求メッセージがこのサイズを超えると、応答でエラー「413 Maximum Request Size Exceeded」が返されます。要求をサイズ制限内に抑えるには、1 つの要求で複数のメッセージを送信しないでください。

メモ