c++ - 寻找用于简单协议(protocol)实现的库

标签 c++ c parsing networking ipc

<分区>

我需要用 C++ 实现一个简单的网络交互,我一直想知道是否已经有库可以做到这一点。我的协议(protocol)基本上发送消息并接收响应。每条消息只是一组 3-4 个基本数据类型的值。我想找到一个可以执行以下一项或多项操作的库:

  1. 将值序列化为高效的字节数组(我不能使用基于文本的序列化)。
  2. 发送消息并等待结果(它可以锁定或异步接收响应,我不在乎)。
  3. 它必须能够关联发送的消息和响应。

理想情况下,我希望能够写出这样的东西:

// 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::send 不是在消息发送成功时返回 true,而是在对方响应成功时返回 true。所有这些冗长的解释只是为了表明我需要一个简单的功能。没有什么花哨。我什至可以自己发送和接收缓冲区,但我需要一些可以将消息与响应相关联的东西。我不想选择 RPC,因为在我看来它有点矫枉过正。

谢谢。

最佳答案

谷歌 protocolbuffers .我已经使用它一段时间了,它速度快、可扩展且非常轻便。

这是一种考虑了时间/网络优化的二进制序列化。

它不支持通过套接字实际“发送”,但如果您只发送一个包含消息大小的整数,然后发送消息,这真的很容易。这样,在另一侧,您读取一个整数并知道传入消息的大小以正确调用 parseFromArray

关于c++ - 寻找用于简单协议(protocol)实现的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2108781/

相关文章:

c - 将 CSV 文本文件中的值输入到数组中

macos - 如何在 MacOS 上从 powershell 获取主机名?

c++ - 对象构造 [c++]

c++ - 如何使用 fstream 指针对文件进行操作?

c++ - 如何在 Arduino 上将 HexBytes 数组转换为 C/C++ 中的字符串?

无法以编程方式减小 gtk 窗口的大小

c++ - 读取在空闲存储上分配的数组的字符

c++ - myProgrammingLab "palindrome"挑战和递归

java - java中使用多线程解析xml并写入txt文件

json - 为什么用 jq 解析返回 null?