如何让IIS支持SSE?Django+wfastcgi部署后实时推送失效
解决方案
问题核心是wfastcgi默认缓冲输出,必须强制其以流式传输响应才能适配SSE需求,具体操作如下:
- 修改web.config,禁用wfastcgi缓冲
在web.config的<appSettings>节点中添加:
<add key="WSGI_PIPE_TRANSFER_MODE" value="streaming" />
该配置会让wfastcgi实时转发响应内容,而非等待全部生成后再发送。
- 优化Django响应头部
在原有基础上补充两个关键头部,阻止中间层缓冲:
response = StreamingHttpResponse(event_stream(), content_type='text/event-stream') response['Cache-Control'] = 'no-cache' response['Connection'] = 'keep-alive' response['X-Accel-Buffering'] = 'no'
X-Accel-Buffering: no可让IIS识别并禁用响应缓冲。
- 检查IIS FastCGI应用程序设置
- 打开IIS管理器,找到对应站点的FastCGI应用程序
- 进入编辑界面,在「进程模型」标签下将「快速关闭超时」设为较大值(如300秒),适配SSE长连接
- 确认「常规」标签下的「启用响应缓冲」未勾选
- 临时 workaround:触发最小输出阈值
若上述配置仍无效,可在每个SSE消息前输出足够长度的空字符,强制FastCGI推送内容:
yield " " * 1024 # 填充数据触发输出 yield f"data: Event {i}:{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n"
内容的提问来源于stack exchange,提问作者yoyo nonoleo
相关产品推荐
相关产品推荐

