当前位置: 首页 > news >正文

php flush实时输出线上环境好使,本地环境等待一段时间后一次性输出结果的原因

近期对接deepseek接口时为了拥有较好的用户体验,等待答案返回时采用了flush分布输出,但是线上环境下可以正常分布输出,同样代码在本地总是等待许久后一次性出结果,排查许久,发现竟然是本地和线上不同的php加载模式导致。

1、线上环境与本地环境区别:

1)线上环境:

Server APIFPM/FastCGI

2)本地环境:

Server APICGI/FastCGI
2. PHP-FPM 与 mod_fcgid 差异

确认本地环境是否通过 mod_fcgid 运行 PHP,而线上使用 mod_php。这两种方式处理输出缓冲的机制不同:

  • mod_php:PHP 直接嵌入 Apache,flush() 可能更直接
  • mod_fcgid:PHP 作为独立进程运行,需要额外配置避免缓冲
  • mod_php:通常会逐秒输出数字(如果未被浏览器缓冲)。
  • mod_fcgid:可能会在 5 秒后一次性输出所有内容(默认缓冲)。

不同模式下的加载方式不一致,apache的配置文件 httpd.conf 中做以下修改即可。

<IfModule mod_fcgid.c>
    # 禁用输出缓冲(关键设置)
    FcgidOutputBufferSize 0
    
    # 增加I/O超时时间,避免长时间操作被中断
    FcgidIOTimeout 3600
    FcgidConnectTimeout 60
    
    # 可选:限制每个PHP进程的请求数,防止内存泄漏
    FcgidMaxRequestsPerProcess 500
    
    # 可选:控制进程数量,根据服务器资源调整
    FcgidMaxProcesses 20
    FcgidMinProcessesPerClass 2
    FcgidMaxProcessesPerClass 8
</IfModule>

# 在httpd.conf中注释掉可能干扰的模块
# LoadModule deflate_module modules/mod_deflate.so
# LoadModule cache_module modules/mod_cache.so
 

KeepAlive Off

相关文章:

  • PR2020+MS1861 AHD转MIPI(DSI)/LVDS/TTL转换器
  • 排查 WebView 中 touch、click 事件失效:移动端调试过程详解
  • JUC:4.线程常见操作与两阶段终止模式
  • 【图像处理入门】12. 综合项目与进阶:超分辨率、医学分割与工业检测
  • Godot4.3类星露谷游戏开发之【简易库存】(UI部分)
  • 一文详解 transformer 中的 self-attention
  • 数星星--二分
  • AI Agent全解析:定义、原理与B2B企业中的应用落地指南
  • 【Linux手册】进程终止:进程退出和信号的响应机制
  • C++面向对象-友元
  • CSS 与 JavaScript 加载优化
  • Java调用金蝶webApi保存接口修改数据
  • 无线USB转换器TOS-WLink的无线USB助手配置文件详细胡扯
  • Unreal引擎——Chaos物理引擎(不)详解
  • 【队列】----【Keep In Line】
  • 阶段二开始-第一章—8天Python从入门到精通【itheima】-116节(封装)
  • 国防科大刘丽教授团队提出了一种用于合成孔径雷达目标识别的解耦自监督子空间分类器|TGRS
  • C++11新库特性:从入门到精通
  • 《Opto-Electronic Advances》热点论文速览(2025)
  • 【Python】实现对LGBT+ rights worldwide (2025)数据集的可视化展示