如何通过不同版本的tcp传输不同的对象

时间:2014-05-01 16:26:31

标签: c++ c++11 boost tcp

我需要序列化不同的对象(到消息)并通过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];
};

目前我有传输类,其中包含固定标头,包含消息类型,消息版本和长度,body / 主体是char数组,其中包含来自消息类的序列化字段,客户端和服务器上的相同实现 /),但我不确定这是最好的方法,有没有更好的方法。

1 个答案:

答案 0 :(得分:1)

我只想先说清楚。您只需向客户端发送数据包即可向客户端实现功能(或其他字段)。 唯一的选择是使客户端程序能够自我修改并发送解释服务器数据的代码,或者非常类似的选项,并且很容易使客户端更新它的软件。

但我想你不想像上面所描述的那样纠结你的程序。 要使旧版客户端与较新版本兼容,您需要使服务器像客户端版本一样工作。 您需要复制您的通信方式(在发送之前安排数据包的代码本身)每次实现新功能或客户端使用旧版本时,在服务器上以相同版本与之通信。