通过Azure应用网关访问SSE服务时事件推送延迟问题咨询
问题诊断与解决方案
延迟原因确认
这个15秒延迟几乎可以确定是Azure应用网关的默认配置导致的。SSE是基于长连接的流式传输协议,而应用网关的默认优化设置会干扰SSE的实时推送:
- 空闲超时(Idle Timeout):Standard层网关默认空闲超时为15秒,当SSE连接在15秒内没有数据推送时,网关会延迟转发后续数据直到超时窗口结束,这就是你看到的最长15秒延迟来源。
- 响应缓冲(Response Buffering):网关默认会缓冲完整响应后再转发给客户端,但SSE是逐段推送数据,缓冲会导致数据被暂存,直到缓冲满或超时才发送,进一步加剧延迟。
针对SSE的网关配置调整
需要在Azure应用网关中修改以下两项关键配置:
1. 调整后端HTTP设置的空闲超时
- 登录Azure门户,进入你的应用网关资源
- 找到后端HTTP设置,编辑当前使用的HTTP配置
- 将空闲超时值调整为大于你的SSE最大推送间隔(建议设为300秒,避免频繁触发超时)
- 确保**保持活动(Keep Alive)**处于启用状态,SSE依赖长连接,这是必须的
2. 禁用响应缓冲
在同一个后端HTTP设置页面中,找到响应缓冲选项,设置为禁用。这样网关会实时转发每一段SSE数据,不会等待缓冲填满。
额外验证项
- 打开浏览器开发者工具的Network标签,检查EventSource请求的响应头是否包含
Connection: keep-alive和Cache-Control: no-cache,sse_starlette默认会自动添加这些头,但可以确认一下 - 虚拟机的防火墙/安全组无需额外调整,因为直接IP访问正常,说明长连接本身没有被限制
补充说明
Azure应用网关Standard层完全支持SSE,但默认的Web请求优化策略不适合流式传输场景。调整上述配置后,应该能消除延迟,实现和直接访问虚拟机IP一致的实时推送效果。
内容的提问来源于stack exchange,提问作者Vinay
相关产品推荐
相关产品推荐

