作为我们学期末项目的一部分,我们需要实施分布式聊天系统。系统需要具有可扩展性和稳健性。牢记这些标准我对如何在套接字上发送矢量对象感到困惑。
由于向量是动态分配的,因此发送它的对象不会起作用,因为它所指向的内存不会被复制。为了实现这个序列化将是最好的选择。但是,根据我们的项目要求,我们不会使用任何第三方库,如Boost和Google Protocol Buffers。
因此,为了序列化矢量对象并通过网络发送它,我似乎无法找到解释如何继续的起始指南。我们还可以使用其他任何替代方案吗?
该向量将包含聊天组中每个成员的字符串(IP地址:端口)。
任何帮助都会很棒。谢谢。
注意:我们需要让聊天客户端在群集上运行,我相信为了使系统健壮且可扩展,我们还需要考虑结束。
答案 0 :(得分:0)
如果在这种情况下需要二进制序列化,则需要实现2种类型的序列化 - 整数和字符串。通过将整数转换为char然后转移:
,可以逐字节地轻松写入整数// assuming 32 bit ints and 8 bit bytes
int integer = 1337;
unsigned char data[4];
for(int i = 0; i < 4; ++i)
data[i] = (unsigned char) (integer >> 8*i);
通过总和移位反序列化:
int integer = 0;
for(int i = 3; i >= 0; ++i)
{
integer += data[i];
integer <<= 8;
}
(我没有测试代码,所以在调试器中跟踪它,并确保它完成我认为它做的事情:))
序列化字符串将是序列化大小,然后是流上的字符。
Vector将是这两个大小的向量的组合,然后是逐个字符串。
您可能希望添加魔术字和校验和,以确保客户端知道预期的内容以及如何验证数据。如果你想变得非常花哨,可以为ASN.1实现自己的支持。 :)