Erlang と Mochiweb を使用して Web サービスを作成しました。Web サービスは多くの結果を返し、計算が完了するまでに時間がかかります。プログラムが結果をすべて見つけたときに返すのではなく、プログラムが見つけたらすぐに結果を返したいと思います。
編集:
チャンクされたリクエストを使用して結果をストリーミングできることがわかりましたが、接続を閉じる方法が見つからないようです。mochiwebリクエストを閉じる方法について何か考えはありますか?
HTTP 1.1 で未知のサイズのデータをストリーミングするには、HTTPP チャンク転送エンコーディングを使用できます。このエンコーディングでは、データの各チャンクの前に 16 進数のサイズが追加されます。最後のチャンクは長さゼロのチャンクで、チャンク サイズは 0 としてコーディングされていますが、データはありません。
クライアントが HTTP 1.1 をサポートしていない場合、サーバーはデータをバイナリ チャンクとして送信し、ストリームの最後で接続を閉じることができます。
MochiWebでは、すべて次のように機能します。
Response = Request:respond({Code, ResponseHeaders, chunked})関数で開始する必要があります。(ちなみに、コードのコメントを見てください);Response:次に、 write_chunk(Data)関数を使用してチャンクをクライアントに送信できます。クライアントに、長さゼロのストリーム チャンクの最後を送信する必要があることを示すには: Response:write_chunk(<<>>).