寻找一个简单协议实现的库

时间:2010-01-21 11:26:35

标签: c++ c parsing networking ipc

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

  1. 将值序列化为有效的字节数组(我不能使用基于文本的序列化)。
  2. 发送消息并等待结果(它可以异步锁定或接收响应,我不在乎)。
  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 :: send返回true。所有这些冗长的解释只是为了表明我需要一个简单的功能。没有什么花哨。我甚至可以自己发送和接收缓冲区,但我需要能够将消息与响应相关联的东西。我不想使用RPC,因为在我看来这是一种过度杀伤。

    谢谢。

2 个答案:

答案 0 :(得分:2)

Google protocolbuffers。我已经使用它一段时间了,它快速,可扩展且非常轻巧。

这是一个二进制序列化,考虑到时间/网络优化。

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

答案 1 :(得分:1)

转到Google的协议缓冲库。它最小化发送的数据并自动生成从声明文件自动序列化和反序列化的cpp文件。当您发布协议的新版本时,它也向后兼容!

http://code.google.com/p/protobuf/