Потоковые результаты от Mochiweb - PullRequest
0 голосов
/ 13 апреля 2011

Я написал веб-сервис, используя Erlang и Mochiweb. Веб-сервис возвращает много результатов и занимает некоторое время, чтобы завершить вычисления. Я хотел бы вернуть результаты, как только программа их найдет, вместо того, чтобы возвращать их, когда они все их нашли.

редактирование:

Я обнаружил, что могу использовать запрос по частям для потоковой передачи результатов, но мне кажется, что я не могу найти способ закрыть соединение. Итак, есть идеи о том, как закрыть запрос mochiweb?

1 Ответ

2 голосов
/ 14 апреля 2011

Для потоковой передачи данных еще неизвестного размера с HTTP 1.1 вы можете использовать HTPP-кодирование по частям передачи .В этой кодировке каждому фрагменту данных предшествует его размер в шестнадцатеричном формате.Последний блок - это блок нулевой длины, с размером блока, закодированным как 0, но без каких-либо данных.

Если клиент не поддерживает HTTP 1.1, сервер может отправлять данные в виде двоичных фрагментов и закрывать соединение в концепоток.

В MochiWeb все работает следующим образом:

  1. HTTP-ответ должен начинаться с Response = Request: reply ({Code, ResponseHeaders, chunked}) функция.(Кстати, посмотрите на комментарии к коду);
  2. Затем чанки можно отправлять клиенту с помощью функции Response: write_chunk (Data) .Чтобы указать клиенту, конец потока нулевой длины должен быть отправлен: Response:write_chunk(<<>>).
  3. Когда обработка текущего запроса завершена, MochiWeb решает, должно ли соединение быть закрыто или может использоваться повторно Постоянное соединение HTTP .
...