Я хотел бы использовать boost :: beast для чтения и записи в etcd. Для начала я хотел бы иметь возможность сделать эти примеры с бустом зверя. Они легко выполнимы с завитком. Etcd можно рассматривать как хранилище ключей / значений. Функции set / get (put / range на странице примеров) легко сделать с примером клиента boost :: beast . Там нет проблем.
Но "смотреть", я не понимаю. Согласно документам , часы - это непрерывный поток, в отличие от других, которые являются сеансами, которые умирают сразу после получения результата. Примеры скручивания показывают изменение значения и ответа на месте, пока часы еще активны. Я должен использовать этот же поток для выполнения всего, что связано с этими часами, включая его остановку.
Мой вопрос в целом: Как я могу реализовать это в boost :: beast ?
Скажем, из примера клиента я отправляю ioc.run
через поток с
std::thread t(&std::iocontext::run, &ioc);
t.detach();
Теперь у меня есть полный контроль над клиентом в главном потоке. Должен ли я создавать новые http-запросы и отправлять их в async_write
через объект сокета? Но тогда, если я это сделаю, я потеряю функции boost :: beast при переносе заголовка http с хорошим http::request<http::string_body>
Я должен создавать заголовки вручную? Или я должен просто отправить json
с каким-то ограничителем строки, чтобы указать, что сообщение окончено? Как выглядит протокол связи?
Пример с boost :: beast был бы великолепен.