当前位置:首页 > 每日看点

如何使用flask完成数据传输?

卡卷网1年前 (2025-03-29)每日看点247

根本原因

IIS 的 FastCGI 模块默认启用响应缓冲(Response Buffering),会强制等待 Flask 返回完整 HTTP 响应后再发送给客户端,导致以下问题:

  • 流式数据被缓存:Flask 的 text/event-stream 流式响应被 IIS 拦截并缓存,无法实时逐字输出
  • HTTP协议配置冲突:FastCGI 默认不支持分块传输编码(Chunked Transfer Encoding)

解决方案

1. 禁用 FastCGI 响应缓冲 通过修改 IIS 的 FastCGI 配置禁用缓冲:

1. 打开 IIS 管理器

2. 进入 FastCGI 设置(服务器节点 → FastCGI 设置)

如何使用flask完成数据传输?  第1张

在这里插入图片描述

3. 找到 Python 的 FastCGI 应用(如 wfastcgi.py

如何使用flask完成数据传输?  第2张

在这里插入图片描述

4. 添加以下环境变量:

Name: WSGI_BUFFERING
Value: 0

2. 配置 Flask 响应头app.py 的流式响应中添加防缓存头:

@app.route('/api/ask', methods=['POST']) def ask(): # ...原有代码... return Response( generate(), mimetype='text/event-stream', headers={ 'Cache-Control': 'no-cache', 'X-Accel-Buffering': 'no' # 强制禁用 Nginx/IIS 缓冲 } )

3. 禁用 IIS 动态压缩 动态内容压缩会强制缓冲数据:

1. 进入 IIS 管理器

2. 打开 压缩 功能

如何使用flask完成数据传输?  第3张

在这里插入图片描述

3. 取消勾选 启用动态内容压缩

如何使用flask完成数据传输?  第4张

在这里插入图片描述

4. 验证 MIME 类型

确保 IIS 允许 text/event-stream 类型:

1. 打开 IIS 管理器

如何使用flask完成数据传输?  第5张

在这里插入图片描述

2. 进入 MIME 类型 设置

如何使用flask完成数据传输?  第6张

在这里插入图片描述

3. 添加以下类型:

扩展名: .*
MIME 类型: text/event-stream

备选方案

如果仍不生效,可改用反向代理模式:

1. 使用 WaitressCherryPy 作为生产服务器运行 Flask:

pip install waitress waitress-serve --port=5000 app:app

2. 在 IIS 中配置 URL 重写 规则,将请求反向代理到 http://localhost:5000

验证步骤

  1. 重启 IIS 服务(或应用程序池)
  2. 使用浏览器开发者工具检查响应头:
http HTTP/1.1 200 OK
Content-Type: text/event-stream
Cache-Control: no-cache
X-Accel-Buffering: no
Transfer-Encoding: chunked # 确保启用分块传输

3. 观察前端是否实时接收流式数据

完成上述步骤后,逐字输出效果应恢复正常。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/03/12059.html

分享给朋友:

相关文章

免费流量才是王道 独立网站如何正确“花钱” ?

免费流量才是王道 独立网站如何正确“花钱” ?

获客难、广告成本高、效益差是平台卖家普遍遇到的发展瓶颈,由此也让不少卖家转向独立站之路。由平台转向独立站、曾做到谷歌全球搜索排名前三的成人用品独立站卖家林健认为,独立站由于不限制广告方式和渠道的优势,成为跨境电商卖家的一个很好选择。“如果谷…

天涯论坛关闭后,除了知乎,大家都在逛什么?

天涯论坛关闭后,除了知乎,大家都在逛什么?

天涯神贴合集完整版,给大家整理好了! 那年大学,打开天涯,感觉打开了一片新天地,里面什么样的人都有,有大神也有蛇神,比某乎好太多了,可惜后面关了很多年前,天涯社区曾出现了不少深受欢迎的帖子,成功地预言了许多形势和事件。这些帖子因此被冠以“天…

在 Istio、Linkerd 和 Cilium 之间,哪种服务网格在性能上表现最佳?

在 Istio、Linkerd 和 Cilium 之间,哪种服务网格在性能上表现最佳?

在讨论服务网格之前,先理解一下为什么我们需要它。现代微服务架构意味着将应用拆分为多个小型、独立的服务,这些服务可以独立开发、部署和扩展。然而,服务之间的通信和管理成了巨大的挑战,例如如何保证安全的通信、负载均衡、监控与可观测性等。服务网格…

只有我一个人后悔升级鸿蒙next吗?

只有我一个人后悔升级鸿蒙next吗?

我有一台mate 60 pro,第一时间升级了“纯血鸿蒙”。 虽然功能并不完善,甚至有些简陋,但是我非常~非常不后悔升级鸿蒙next系统。 因为.... 这就是一款“大型养成系游戏“,给我平淡的生活提供了源源不断的情绪价值。 我每天特别…

PHP承载百万/天 访问量需要用到什么技术?

当年做一个百万PV的商城,也不过是两台2c4g的阿里云虚机罢了(其实一台就够,另外一台主要的逼着大家一定开发的时候一定要有负载均衡和横向扩容的意识)。当时框架还是Thinkphp3.2,框架提高运行效率的开关全打开,标准的lnmp模式,单机…

无意中发现技术主管写的代码,大家帮忙看看什么水平?

无意中发现技术主管写的代码,大家帮忙看看什么水平?

虽然很多答主用了诸如“典范级”、“心旷神怡” 的形容, 赞美这段代码, 但这里, 出于技术讨论的动机, 我说说不同看法. 栈, 如果善于利用栈来处理树结构, 那么可以写出更简洁的代码, 根本不需要 recuresiveFn 这种方法. 泛型…

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。