在 Nginx 上部署了两个应用程序,一个是 PHP,另一个是 Python。
基于 Python 的应用程序是使用 uwsgi 部署在 Nginx 上的 REST API 应用程序。一个 API 提供 CSV 下载服务。 CSV 文件大多超过 100 MB。因此该 API 提供流式下载。
使用 php-fpm 在同一个 Nginx 上托管的 PHP 应用程序使用 REST API。在 CSV 下载的情况下,PHP 应用程序向 API 发出请求并提供流式下载以进一步流式下载到用户/浏览器。这东西工作正常。
现在的问题是,当正在从 PHP 应用程序下载请求并尝试访问 php 应用程序的其他页面时,它不会加载(响应)页面。如果我取消下载请求,它会立即加载/响应页面。
在 API 中,如果正在下载流式传输,则其他 API 请求响应有效,因此 python 应用程序没有问题。
但是对于 PHP 应用程序它不起作用。 尝试了不同的选项,例如在 Nginx 中更改 worker_processes、worker_connections。还有 php-fpm 中的池管理器配置。没有成功。
为了从 PHP 应用程序向 REST API 发出请求,我使用了 PHP curl,即 curl。
请帮忙。
最佳答案
最后问题解决了,主要是session lock问题。
你需要有回调函数来处理 session 关闭以及写入接收到的数据,
回调函数:
function curlWriteHandler($ch, $data)
{
echo $data;
session_write_close();
return strlen($data);
}
& 设置回调为,
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curlWriteHandler');
从以下答案/链接中获得引用(我仍然不知道在答案中指定链接是个好主意)
What for do we use CURLOPT_WRITEFUNCTION in PHP's cURL?
关于php - 如果正在进行流式下载,Nginx PHP-FPM 不提供请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38202275/