#c #c 11 #boost #boost-asio #boost-beast
#c #c 11 #повышение #boost-asio #boost-зверь
Вопрос:
Как я могу создать универсальный клиент boost::beast HTTP (s), отправляющий и получающий запросы и ответы любого типа? Я нашел только одно решение для создания класса шаблона
template <class Request, class Response>
class HttpsClient : public std::enable_shared_from_this<HttpsClient<Request, Response>>
{
public:
using Handler = std::function<void(const std::error_codeamp; ec, const Responseamp; response)>;
explicit HttpsClient(asio::io_contextamp; ioc, ssl::contextamp; ctx, std::string host, std::string service);
void send(Requestamp;amp; request, Handleramp;amp; handler);
private:
void onResolve(const boost::system::error_codeamp; ec, tcp::resolver::results_type results);
void onConnect(const boost::system::error_codeamp; ec, const tcp::endpointamp; endpoint);
void onHandshake(const boost::system::error_codeamp; ec);
boost::beast::flat_buffer m_buffer;
Request m_request;
Response m_response;
};
Я хочу иметь асинхронный общедоступный интерфейс
void send(Requestamp;amp; request, Handleramp;amp; handler);
который выполнит всю необходимую работу для разрешения, подключения и установления связи и сможет отправлять запросы любого типа.
Я не могу создать функцию шаблона, send
потому что onResolve
, onConnect
и onHandshake
также должны быть функциями шаблона.
Как я могу эффективно решить эту задачу с точки зрения c 11?
Комментарии:
1. Не связанный, но повышающий. Beast не поддерживает HTTP / 2. Старый добрый libcurl может быть лучшей альтернативой с точки зрения производительности.
2. Акцент вопроса делается на boost-beast, а не на максимально возможной производительности