libmicrohttpd: проблемы с ответами на обратный вызов - PullRequest
0 голосов
/ 14 апреля 2020

Я использую следующую последовательность команд:

MHD_Response* resp = MHD_create_response_from_callback (
            MHD_SIZE_UNKNOWN, DEFAULT_BLOCK_SIZE, 
            asyncReplyCallback, c, asyncReplyCleaner );
MHD_add_response_header (c->mConnection, "Content-Type", "application/json" );
MHD_queue_response ( c->mConnection,  MHD_HTTP_OK , resp );
MHD_destroy_response (resp);    

Функция обратного вызова выполняет ок. следующий:

<1 or more times: copy data to provided buffer and return data length >
return MHD_CONTENT_READER_END_OF_STREAM; /* when data is finished */

В целом этот код работает, но с проблемами: 1. Несмотря на то, что библиотека добавляет «Transfer-encoding: chunked», в данных отсутствует форматирование чанков. Все, что я возвращаю из обратного вызова, передается «как есть». 2. Заголовок ответа не установлен. 3. Браузер не знает, когда заканчиваются данные. Это показывает, что это соединение загружается навсегда. Объект javascript XmlHttpRequest никогда не получает состояние «готово». У меня сложилось впечатление, что это соединение (этот сокет) никогда не будет повторно использоваться браузером для последующих запросов.

Есть ли способ правильно обработать ответ от обратного вызова?

...