У меня есть случаи, когда есть частичный ответ, который слишком велик для зверя, и я хочу остановиться, прежде чем доберусь до body_limit
зверя, и продолжить обработку сообщения с этой точки, используя обычный boost :: asio. Имейте в виду, что это (очевидно) означает, что я уже получил заголовок и большую часть тела.
Я использую его для обратного прокси-сервера, поэтому в основном я хочу как-то отправить неполный ответ наhttp-клиент, продолжая ретрансляцию оставшихся данных ответа с помощью boost :: asio.
Я предполагаю, что мне нужно каким-то образом сериализовать неполный ответ, возможно, используя operator<<
to std::stringstream
, отправьте этоклиенту, используя boost :: asio, и продолжайте общение оттуда.
Будет ли это работать? Это правильный способ сделать это, или есть лучший способ, может быть, даже с использованием Apast Beast? Есть ли другой способ обработки фрагментированных сообщений, которые в API зверя могут превысить body_limit
?
Заранее спасибо, Дэвид.
ОБНОВЛЕНИЕ
Я, наконец, отказался от идеи вернуться к boost asio, и теперь пытаюсь получить http-сообщение (chunked или обычный) в чанках с буфером фиксированного размера, чтобы я не достигал предела тела. Я только что закончил пробежку по Получать / анализировать тело сообщения по одному куску за раз · Выпуск # 154 · boostorg / beast , и кажется, что это именно то, что мне нужно. Я также пытаюсь реализовать обратный прокси-сервер .. Я пытался использовать Incremental Read 1. - 1.70.0 , но получаю ошибку Reference to non-static member function must be called
при попытке скомпилировать эту строку:
ctx->response.get().body().data = response_buffer;
Может быть, страница примера инкрементного чтения не обновлена с использованием последнего синтаксиса? У вас есть пример, относящийся к обратному прокси, который я пытаюсь написать?
Заранее спасибо, Дэвид