我需要序列化不同的对象(到消息)并通过 tcp 连接发送到服务器(客户端和服务器都是 C++)并且我不能使用 protobuf(只有 boost 库可用)。是否已经有算法或示例,或教程如何做到这一点(我需要考虑消息将要更改,新版本具有附加字段)。
class Message {
public:
char type;
char version;
};
class Register : public Message {
public:
// version 1 of Register message
string first_name;
string last_name;
};
class Register : public Message {
public:
// version 2 of Register message
string first_name;
string last_name;
long salary;
};
class ChangeName : public Message {
public:
// version 1 of ChangeName message
string first_name;
};
// this is going to be transmitted ower tcp (length + type + version + data) like array of bytes
class TransmissionMessage {
public:
uint32_t length;
char type;
char version;
char data[length];
};
目前我有用于传输的类,它具有包含消息类型、消息版本和长度的固定 header 和正文/正文是包含来自消息类的序列化字段的字符数组,客户端和服务器上的实现相同/),但我不确定这是最好的方法,还有更好的方法吗。
最佳答案
我只是想先说清楚一点。您不能通过向客户端发送数据包来实现功能(或附加字段)。 唯一的选择是让客户端的程序能够 self 修改并发送解释来自服务器的数据的代码,或者非常相似的选项并且很容易让客户端更新它的软件。
但我猜你不想像上面描述的那样把你的程序搞得一团糟。 为了使旧客户端与新版本兼容,您需要使服务器像客户端版本一样工作。 每次实现新功能或字段以及客户端使用旧版本时,您都需要复制通信方式(在发送前安排数据包的代码本身),并在服务器上以相同版本与它通信。
关于c++ - 如何通过不同版本的tcp传输不同的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23411934/