サービスが数分間沈黙し、プロキシがタイムアウトする場合は、ハートビート用バイトを追加する前に、クライアントが何を受け取るべきかを決めます。タイマーを延ばすことは1回の待機には役立ちますが、どの進捗が有効かはレスポンスの契約が決めます。

アプリケーション設計進捗の契約
非同期ジョブ監視を表す表現を伴う 202 Accepted。その後、有限のステータス要求と明示的な完了/失敗状態
Server-Sent Events ストリームContent-Type: text/event-stream と、SSE クライアントが理解するレコード

202 はジョブの成功を約束しません。SSE では、コメントレコードは次のようになります:

: heartbeat

コロンはそれをアプリケーションイベントではなくコメントにします。HTML のオーサリングノートは、一部の古いプロキシのアイドル挙動に対して約 15 秒ごとの定期的なコメントを提案しています。これは指針であり、普遍的なタイムアウト保証ではありません。

ヘッダーを完了し、アプリケーション/配信スタックがレコードをローカルにバッファリングするのではなく解放するようにします。まだ送信されていないバイトは、下流の中間装置をアクティブに保つことはできません。

通常の JSON やバイナリ内容に SSE コメントを挿入しないでください。HTTP/1.1 の長さゼロのチャンクは chunked ボディを終了させるため、繰り返し可能な空のハートビートではありません。

操作の期限とキャンセルポリシーを維持します。トラフィックの活動だけでは、有用なジョブの進捗や有効な最終結果を示しません。

関連記事