切断とは何ですか?
powerstream エンドポイントに接続する際は、HTTPS リクエストを発行し、可能な限り長い間その結果として得られるストリームを受信し続ける必要があります。サーバー側のエラー、クライアント側の過度な遅延、ネットワーク問題、定期的なサーバーメンテナンス、重複ログインといった事態が発生しない限り、当社サーバーは接続を無期限に維持します。ストリーミングエンドポイントへの接続では、切断が発生する可能性が高く、その発生を前提として再接続ロジックを実装しておく必要があります。
ストリーミング接続が切断される可能性がある理由
- 認証エラー (誤ったトークンや、誤った認証方式が使用されている場合など) 。
- X 側でストリーミングサーバーが再起動されることがあります。これは通常、コードのデプロイに関連しており、一般的に起こり得るものとして想定し、それを前提に設計しておく必要があります。
- クライアントがストリームから配信される投稿の量についていけていない、またはデータの読み取りが遅すぎる場合。すべてのストリーミング接続には、クライアントに送信されるメッセージのキューがあります。このキューが時間の経過とともに大きくなりすぎると、接続は閉じられます。
- アカウントが 1 日または 1 か月あたりの投稿数のクォータを超過した場合。
- 冗長なアクティブ接続が多すぎる場合。
- クライアントが突然データの読み取りを停止した場合。ストリームから読み取られる投稿のレートが突然低下した場合、接続は閉じられます。
- サーバーとクライアント間のネットワークの問題が発生している可能性。
- 一時的なサーバー側の問題、計画メンテナンスやアップデートが行われている場合 (ステータスページを確認してください) 。
切断を想定した上での再接続
- 新しいコンテンツとハートビートの受信が止まったことを、コードで検出できるようにします。
- そのような状況になった場合、コードは再接続ロジックをトリガーする必要があります。一部のクライアントや言語では読み取りタイムアウトを指定できるため、これを 20 秒に設定できます。
- サービスはこれらの切断を検出し、可能な限り早く再接続する必要があります。
- TCP/IP レベルのネットワークエラーに対しては、線形バックオフを行います。これらの問題は一般的に一時的であり、すぐに解消される傾向があります。再接続までの遅延時間を試行ごとに 250ms ずつ増やし、最大で 16 秒まで延長します。
- 再接続が適切な HTTP エラーに対しては、指数関数的なバックオフを行います。最初は 5 秒待機し、試行ごとに待機時間を 2 倍にして、最大で 320 秒まで延長します。
- HTTP 429 エラー (レート制限超過) に対しては、指数関数的なバックオフを行います。最初は 1 分待機し、試行ごとに待機時間を 2 倍にします。なお、HTTP 429 を受信するたびに、アカウントに対するレート制限が解除されるまで待機しなければならない時間が延長されることに注意してください。
失われたデータの復旧
レート制限と使用状況
-
x-rate-limit-limitは、15 分間のウィンドウ内でクライアントが実行できるリクエスト数の上限を示します。 -
x-rate-limit-remainingは、15 分間のウィンドウ内で残っているリクエスト回数を示します。 -
x-rate-limit-resetは、15 分間のウィンドウがいつ再開されるかを示す UNIX タイムスタンプであり、その時点でx-rate-limit-remainingは 0 にリセットされます。
再接続に関するベストプラクティス
バックオフ戦略をテストする
複数回の再接続に関するアラート
DNS 変更への対応
User Agent
user-agent HTTP ヘッダーにクライアントのバージョンを必ず含めてください。これは X 側で問題を診断するうえで非常に重要です。実行環境の制約により user-agent フィールドを設定できない場合は、代わりに x-user-agent ヘッダーを設定してください。