在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。
请帮忙。
答案 0 :(得分:1)
最后问题解决了,主要是会话锁定问题。
您需要具有回调函数来处理会话关闭以及写入接收的数据,
回调功能:
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?
How use CURLOPT_WRITEFUNCTION when download a file by CURL
&安培; https://curl.haxx.se/libcurl/c/CURLOPT_WRITEFUNCTION.html