Мне нужно реализовать простое сетевое взаимодействие в C++, и мне было интересно, есть ли библиотеки, которые уже это делают. Мой протокол в основном отправляет сообщения и получает ответы. Каждое сообщение представляет собой всего лишь набор из 3-4 значений базовых типов данных. Я хотел бы найти библиотеку (или библиотеки), которая может выполнять одно или несколько из следующих действий:Ищет библиотеку для простой реализации протокола
- Сериализовать значения в эффективном массиве байтов (я не могу использовать сериализацию на основе текста).
- Отправить сообщение и дождаться результата (он может блокировать или получать ответ асинхронно, мне все равно).
- Он должен иметь возможность коррелировать между отправленным сообщением и ответом.
В идеале я хотел бы быть в состоянии написать что-то вроде этого:
// On the sending side
bool send(const string& str, int x, char y)
{
Message msg;
msg << str << x << y;
// Lock until the response arrives
return cool_library::send(address, msg);
}
// On the receiving side
bool receive(Message& msg)
{
string str;
int x;
char y;
msg >> str;
msg >> x;
msg >> y;
if (some conditions...)
return true; // the message was handled successfully
else
return false;
}
Обратите внимание, что cool_library :: отправить возвращает истинное не тогда, когда сообщение было успешно отправлено, но когда другая сторона ответила с успехом результат. Все это длинное объяснение - это просто показать, что мне нужна простая функциональность. Ничего особенного. Я даже могу отправлять и получать буферы, но мне нужно что-то, что может соотнести сообщения с ответами. Я не хочу идти на RPC, потому что это кажется мне излишним.
спасибо.
Действительно выглядит как хорошее решение сериализации. Но знаете ли вы что-то, что может управлять жизненным циклом сообщения для меня? Такие вещи, как ответы на сообщения, возможно, повторы? – FireAphis
Кроме того, что вы думаете о библиотеке сериализации boost? – FireAphis
Никогда не применяйте последовательную сериализацию, но если вы хотите что-то, что обрабатывает сетевые вещи и повышает надежность (через TCP), это будет не так дешево, возможно, вам стоит искать более полные рамки. –