如果某项服务沉默数分钟而代理超时,请在添加心跳字节之前先选择客户端应当收到什么。延长定时器可以帮助某一次等待;响应契约决定哪种进度是有效的。

应用设计进度契约
异步任务202 Accepted,附带描述监控的表示,随后是有限的状态请求和明确的完成/失败状态
Server-Sent Events 流Content-Type: text/event-stream 以及 SSE 客户端能理解的记录

202 并不承诺任务会成功。对于 SSE,注释记录可能如下所示:

: heartbeat

冒号使它成为注释而不是应用事件。HTML 的编写说明建议大约每 15 秒发送一次周期性注释,以应对某些旧的代理空闲行为;这是指导,不是通用超时保证。

完成响应头,并确保应用/服务栈释放记录,而不是在本地缓冲它们。尚未发送的字节无法让下游中间层保持活跃。

不要把 SSE 注释插入普通 JSON 或二进制内容。HTTP/1.1 的零长度块会结束分块正文,因此它不是可重复的空心跳。

保留操作截止时间和取消策略。仅凭流量活动不能表明有用的任务进度或有效的最终结果。

相关文章