2016-07-05 11 views
2

私の設定では、Nginxに2つのアプリケーションがデプロイされています.1つはPHPに、もう1つはPythonにあります。Nginx PHP-FPMがストリーミングのダウンロード中にリクエストを処理しない

Pythonベースのアプリケーションは、uginxを使用してNginxにデプロイされたREST APIアプリケーションです。 1つの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

最後に問題が解決しました。主にセッションロックの問題でした。

あなたは、セッションクローズを処理するためにコールバック関数を持つようにしても、受信したデータを記述する必要が

コールバック関数:として

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

関連する問題