0

Erlang と Mochiweb を使用して Web サービスを作成しました。Web サービスは多くの結果を返し、計算が完了するまでに時間がかかります。プログラムが結果をすべて見つけたときに返すのではなく、プログラムが見つけたらすぐに結果を返したいと思います。

編集:

チャンクされたリクエストを使用して結果をストリーミングできることがわかりましたが、接続を閉じる方法が見つからないようです。mochiwebリクエストを閉じる方法について何か考えはありますか?

4

1 に答える 1

2

HTTP 1.1 で未知のサイズのデータ​​をストリーミングするには、HTTPP チャンク転送エンコーディングを使用できます。このエンコーディングでは、データの各チャンクの前に 16 進数のサイズが追加されます。最後のチャンクは長さゼロのチャンクで、チャンク サイズは 0 としてコーディングされていますが、データはありません。

クライアントが HTTP 1.1 をサポートしていない場合、サーバーはデータをバイナリ チャンクとして送信し、ストリームの最後で接続を閉じることができます。

MochiWebでは、すべて次のように機能します。

  1. HTTP 応答は、Response = Request:respond({Code, ResponseHeaders, chunked})関数で開始する必要があります。(ちなみに、コードのコメントを見てください);
  2. Response:次に、 write_chunk(Data)関数を使用してチャンクをクライアントに送信できます。クライアントに、長さゼロのストリーム チャンクの最後を送信する必要があることを示すには: Response:write_chunk(<<>>).
  3. 現在のリクエストの処理が終了すると、MochiWeb は接続を閉じるか、HTTP 永続接続で再利用できるかを決定します。
于 2011-04-14T18:43:59.910 に答える