- filter stream エンドポイントへの HTTPS ストリーミング接続を確立する。
- ストリームからルールを追加・削除するために、filter stream rules エンドポイントへ POST リクエストを非同期で送信する。
- 低トラフィック時の処理 – ストリーミング接続を維持し、ポストオブジェクトとキープアライブシグナルを検出する。
- 高トラフィック時の処理 – 非同期処理を用いてストリームの取り込みと追加処理を分離し、クライアント側バッファが定期的にフラッシュされるようにする。
- クライアント側で利用量の追跡を管理する。
- ストリーム切断を検出し、状況を評価して自動的にストリームへ再接続する。
- 任意の順序で出現するフィールド
- 予期しないフィールドまたは欠落しているフィールド
- ソートされていない投稿
- 重複したメッセージ
- 任意のタイミングでストリームに流れてくる、新しい任意のメッセージタイプ
- クライアントがストリームを十分な速度で読み取っていることを確認してください。通常、ストリームを読み取りながら本格的な処理を行うべきではありません。ストリームは読み取りに専念し、アクティビティは別のスレッド/プロセス/データストアに渡し、処理は非同期で行ってください。
- データセンターが、大きな持続的データ量に加え、それを大きく上回るスパイク (例: 通常の 5〜10 倍のボリューム) にも対応できる十分な受信帯域幅を備えていることを確認してください。filtered stream の場合、必要となるデータ量およびそれに対応する帯域幅は、ルールによってマッチしている投稿に完全に依存します。
sample: オペレーターを追加し、マッチ率を 100% から sample:50 や sample:25 に下げることを検討してください。
さらに、事前に設定したしきい値をボリュームが超えた場合にチームへ通知する仕組みをアプリケーション内に実装することを推奨します。また、過剰なデータを取り込んでいるルールを自動的に削除する、あるいは極端な状況ではストリームから完全に切断するなどの対策を導入することも検討してください。
Keep-alive シグナル
少なくとも 20 秒ごとに、ストリームは確立済みの接続を通じて、\r\n のキャリッジリターンという形式の keep-alive シグナル (ハートビート) を送信し、クライアントのタイムアウトを防ぎます。クライアントアプリケーションは、ストリーム内に含まれる \r\n 文字を許容できるようにしておく必要があります。
クライアントが HTTP ライブラリで読み取りタイムアウトを正しく実装していれば、データがこの期間内に読み取られない場合に、HTTP プロトコルおよび HTTP ライブラリがイベントを発生させてくれるため、\r\n 文字を明示的に監視する必要はありません。
このイベントは、通常は例外のスロー、または使用している HTTP ライブラリに応じた別のイベントとして発生します。これらのタイムアウトを検出するために、HTTP メソッドをエラー/イベントハンドラーでラップすることを強く推奨します。タイムアウトが発生した場合、アプリケーションは再接続を試みる必要があります。
エラーメッセージ
v2 ストリーミングエンドポイントは、ストリーム内でエラーメッセージを配信することもあります。以下に、これらのメッセージの基本的な形式といくつかの例を示します。配信されるメッセージは変更される可能性があり、新しいメッセージが追加される場合があることに注意してください。クライアントアプリケーションは、変化するシステムメッセージのペイロードを許容できるようにしておく必要があります。
エラーメッセージには、問題の解決方法を説明するドキュメントへのリンクが含まれている点に注意してください。
メッセージ形式: