Nginx PHP-如果流式下载正在进行,FPM 不服务请求

Nginx PHP-FPM not serve request if streaming download in progress

在 Nginx 上部署了两个应用程序,一个在 PHP 中,另一个在 Python 中。

基于

Python 的应用程序是使用 uwsgi 部署在 Nginx 上的 REST API 应用程序。一个 API 服务于 CSV 下载。 CSV 文件大多超过 100 MB。以便API提供流式下载。

PHP 使用 php-fpm 在同一个 Nginx 上托管的应用程序使用 REST API。在 CSV 下载 PHP 的情况下,应用程序向 API 发出请求并提供流式下载以进一步流式下载到 user/browser。这东西工作正常。

现在的问题是,当从 PHP 应用程序下载请求并试图访问 php 应用程序的其他页面时,它不会加载(响应)页面。如果我取消下载请求,它会立即 loads/response 页。

在 API 中,如果下载流式传输正在进行中,其他 API 请求响应工作,因此 python 应用程序没有问题。

但是对于 PHP 应用程序它不起作用。 尝试了不同的选项,例如在 Nginx 中更改 worker_processes、worker_connections。 php-fpm 中的池管理器配置。没有成功。

为了从 PHP 应用程序向 REST API 发出请求,我使用了 PHP curl 即 curl.

请帮忙。

问题终于解决了,主要是session lock问题

您需要有回调函数来处理会话关闭以及写入接收到的数据,

回调函数:

function curlWriteHandler($ch, $data)
    {
        echo $data;
        session_write_close();
        return strlen($data);
}

& 设置回调为,

curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'curlWriteHandler');

从以下 answers/link 获得参考(我仍然不知道在回答中指定 link 是个好主意)

What for do we use CURLOPT_WRITEFUNCTION in PHP's cURL?

How use CURLOPT_WRITEFUNCTION when download a file by CURL

& https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html