【发布时间】:2012-12-04 22:34:11
【问题描述】:
我需要创建与 C++ 客户端和 Python 服务器的 TCP 聊天(已经开始),我在 c++ 类中有消息,例如
class Message{
public:
uint64 utc_time;
uint64 token;
string content;
};
我将这个从客户端发送到服务器,在服务器上我有 utc_time 的优先级队列,需要广播给其他人。我的问题是如何序列化它,使用哪种格式以避免对大小类型 size 的任何跨语言依赖? (也许将来会有更多元数据,所以需要有点通用)?谁能给我建议用于序列化的格式(或仅刷新字节)?
class Persistent:
public:
Persistent(int sz):objSize(sz){}
void write(std::ostream& out)const{out.write((char*)this, objSize);}
void read(std::istream& in){in.read((char*)this, objSize);}
private:
int objSize;
};
我想到了在服务器上使用 c++ 反序列化器并在可能的情况下从 python 调用的其他可能性。这个问题有什么优雅的解决方案吗?
【问题讨论】:
-
您是否查看过 Protocol Buffers、Thrift、JSON 或您选择的搜索引擎建议的其他一百种常见解决方案中的任何一种?
-
语言依赖不是问题,不同的机器,即字长、字节序等,都是问题。使用上面建议的已知解决方案,而不是重新发明这个轮子。只要确保解决方案处理 python 和 c++。可能不是问题。
-
谷歌协议缓冲区code.google.com/p/protobuf
-
@willglynn 我已经有了 JSON,但我认为问题可能是当我从同一条消息发送两条消息,或者从服务器接收几条消息(每条消息都是 JSON)时如何知道一条消息的结尾在哪里如果我得到的只是字节数组。 (也许要使用数组,但我会在 99% 中只发送一个,而这 1% 很关键)
-
@willglynn:“如果我得到的只是字节数组,如何知道结尾在哪里。”这就是所谓的“解析 JSON”。无论你用什么工具来解析它都会知道终点在哪里。
标签: c++ python algorithm tcp protocols