Я собирался отправить структуру с клиента на сервер, используя boost :: asio :: async_write_some, в этом случае boost :: serialization приходит на помощь:
//boost::serialization
struct blank
{
int m_id;
std::string m_message;
template<typename archive>
void serialize(archive& ar, const short version)
{
ar & m_id;
ar & m_message;
}
};
blank info;
info.m_id = 1;
info.m_name = "Rasul";
std::stringstream ss;
boost::archive::binary_oarchive out_archive(ss);
out_archive << info;
Kак я могу отправить / получить out_archive, используя boost :: asio асинхронно? Если у вас есть другие идеи?
У std::stringstream, в который вы сериализуете свою структуру, есть метод str, позволяющий получить содержимое потока в виде строки, её уже можно преобразовать в бинарный буфер при помощи asio::buffer, который можно отправлять асинхронно. Только нужно помнить, что буфер на самом деле хранит ссылку на исходную строку, и нужно не допустить её удаления раньше времени.
С точки зрения производительности это не оптимальный подход, т.к. содержимое потока копируется в строку, но boost::serialisation в любом случае не славится производительностью. Можно попытаться немного оптимизировать и влезть во внутренность потока при помощи rdbuf, но тут уже нужно разбираться с внутренним устройством стандартных потоков. Проще взять другую библиотеку сериализации без использования потоков - в конечном счете вам нужно получить просто массив байт.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости