Общий boost:: клиент beast HTTP (ов)

#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, а не на максимально возможной производительности