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