ストリーミングデータを受信するクライアントの構築
クライアント設計
- filter stream endpoint への HTTPS ストリーミング接続を確立する。
- stream のルールを追加および delete するために、filter stream rules endpoint へ非同期で POST リクエストを送信する。
- 低負荷時の処理 – ストリーミング接続を維持し、Post オブジェクトとキープアライブ信号を検出する。
- 高負荷時の処理 – 非同期処理で stream の取り込みと追加処理を分離し、クライアント側バッファを定期的にフラッシュする。
- クライアント側でのボリューム消費のトラッキングを管理する。
- stream の切断を検出し、評価して自動的に再接続する。
streaming endpoint への接続
data の消費
- 任意の順序で現れる fields
- 予期しない fields や欠落している fields
- ソートされていない Posts
- 重複メッセージ
- 任意のタイミングで stream に流れてくる新たな任意のメッセージ type
バッファリング
streaming endpoint は、利用可能になり次第ただちに data を送信するため、状況によっては非常に大量のデータになることがあります。クライアントの読み取りが十分に速くないなどの理由で(詳細は切断の処理を参照)、X サーバーが即座に stream に新しい data を書き込めない場合、クライアントが追いつけるようサーバー側でコンテンツをバッファリングします。ただし、このバッファが満杯になると、接続を切断するための強制切断が行われ、バッファされていた Posts は破棄され再送されません。詳細は以下を参照してください。 App が処理に追いついていないタイミングを把握する一つの方法は、受信している Posts のタイムスタンプを現在時刻と比較し、その差分を継続的に追跡することです。 パブリックインターネット上の遅延や一時的な障害により、stream の滞留を完全に排除することはできませんが、App を適切に構成すれば大部分は回避できます。滞留の発生を最小限に抑えるには:- クライアントが stream を十分な速度で読み取れていることを確認してください。通常、stream を読み取りながら実処理は行わないでください。stream の読み取りは行い、処理は別のスレッド/プロセス/データストアに引き渡して非同期で行います。
- データセンターに、大量の継続的なデータ量だけでなく、さらに大きなスパイク(例: 通常の 5~10 倍)にも対応可能な十分なインバウンド帯域幅があることを確認してください。Filtered stream の場合、必要となるボリュームおよび対応帯域幅は、ルールがどの Posts にマッチするかに完全に依存します。