1。文本方式而不是二进制方式发送消息,例如
代码:
cmd:p1=v1,p2=v2,...pn=vn;
的形式或者曾经很热门的xml。实现简单,兼容性(向下兼容),调试方便,性能并没有想象的那么差。如果需要可以考虑压缩后传输。
2。二进制方式要实现兼容,需要对消息定义规则,而不是硬编码,例如定义一系列命令码和参数码,以及每个命令中可能存在的参数(这个可以是外部配置的),每个参数可以是两种类型(int,string)中的一个,然后解码的时候根据上述信息解码。
例如:
代码:
struct ArgDecodingFunc {
int arg;
size_t (*func)(const char*, size_t len);
};
/// please note, following information can build in run time (of course, array is not suitable for such case.
ArgDecodingFunc argFuncs[] = { {0, decoding_int}, {1, decoding_int}, {2, decoding_str},...};
size_t (*cmd_decoding[])(const char*, size_t) = { cmd_0, cmd_1, cmd_2,...cmd_n };
while(buffer_is_not_empty) {
int cmd = decode_cmd_code();
*(cmd_decoding[cmd])(buffer, length);
}
其实上述代码也可以根据C++对于多态的支持来实现(这个就留给你当练习啦。。。)。