私はFCGIでPythonFlask+nginxを使用しています。
一部のリクエストでは、大きな応答を出力する必要があります。通常、これらの応答はソケットからフェッチされます。現在、私は次のような応答を行っています。
response = []
while True:
recv = s.recv(1024)
if not recv: break
response.append(recv)
s.close()
response = ''.join(response)
return flask.make_response(response, 200, {
'Content-type': 'binary/octet-stream',
'Content-length': len(response),
'Content-transfer-encoding': 'binary',
})
問題は、実際にはデータが必要ないことです。また、ソケットからフェッチされる正確な応答の長さを決定する方法もあります。したがって、HTTPヘッダーを送信し、それをメモリに収集してnginxに(おそらく何らかのストリームで)供給するのではなく、ソケットから直接出力を開始するための良い方法が必要です。
この一見一般的な問題の解決策を見つけることができませんでした。それはどのように達成されますか?
ありがとうございました!