gpt4 book ai didi

c++ - 这是通过网络发送序列化对象的好概念吗?

转载 作者:行者123 更新时间:2023-11-28 08:26:32 24 4
gpt4 key购买 nike

  • 我有一个客户端和一个服务器
  • 我想从客户端向服务器发送对象
  • 对象必须捆绑在一个包含许多对象的“大数据包”中发送
  • 对象可以随机排列
  • 对象数量不固定
  • 数据包中可能有服务器未知的对象(因此他需要转储它们)

我对序列化没有太多经验。我更喜欢 Boosts 序列化框架(如果可能的话)我想到了以下概念
(不完整的伪代码,受 C++ 启发,没有特定的 Boost::Serialization 代码):

class SerializableObject
{
virtual int getIdentifier() =0;
virtual Archive serialize() =0;
}
class SubclassA : public SerializableObject
{
int getIdentifier() { return 1; }
Archive serialize() { ... }
...
}
class SubclassB : public SerializableObject
{
int getIdentifier() { return 2; }
Archive serialize() { ... }
...
}

现在在客户端:

void packAndSendData()
{
archive << objectA.getIdentifier();
archive << objectA;
archive << objectB.getIdentifier();
archive << objectB;
myNetworkObject.sendData(archive);
}

在服务器端:

void receiveAndUnpackData()
{
archive = myNetworkObject.receiveData();

while(archive.containsObjects()) //possible?
{
int type = archive.deserializeNextObject();
if(type == 1)
SubclassA objectA = archive.deserializeNextObject();
if(type == 2)
SubclassB objectB = archive.deserializeNextObject();
else
archive.dropNextObject(); //How to do this? Possible?
}
}

所以问题是:
- 这是一个好的概念还是有其他的可能性?
- Boost::Serialization 可以实现这样的概念吗
- 如果没有:是否有其他库可以帮助实现这个概念?

我已尝试尽可能压缩问题并提供尽可能多的信息。希望我的意思和我试图实现的目标是可以理解的。如果有人对此问题有更好的标题,请修复现有的标题,我不知道如何从所有方面描述这个问题。

最佳答案

您描述的方法只是一个开始,但您是否考虑过如何序列化对象之间的引用。 IE。序列化对象图。此外,如果您的客户端和服务器可能会彼此不同步,则您可能需要考虑数据格式版本控制。它不一定是一个简单的问题。

Are there other libs which could help implementing the concept?

您可以查看 Google 的 Protocol Buffers项目。它可能会做您想要的,并且是语言中立的。

关于c++ - 这是通过网络发送序列化对象的好概念吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3913015/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com