- У меня есть клиент и сервер
- Я хочу отправлять объекты от клиента к серверу
- Объекты должны отправляться вместе в «большом пакете», содержащем много объектов
- Объекты могут быть в произвольном порядке
- Число объектов не фиксировано
- В пакете могут быть объекты, которые неизвестны серверу (поэтому ему нужночтобы выбросить их)
У меня нет большого опыта работы с сериализацией.Я бы предпочел Boost Serialization-framework (если это возможно с ним), я подумал о следующей концепции(неполный псевдокод, основанный на C ++, без специального Boost :: Serialization-code):
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
- Если нет: Существуют ли другие библиотеки, которые могли бы помочьреализовать концепцию?
Я пытался максимально сжать проблему и дать как можно больше информации.Надеюсь, понятно, что я имел в виду и чего я пытаюсь достичь.Если у кого-то есть лучший заголовок для этого вопроса, пожалуйста, исправьте существующий, я понятия не имел, как описать этот вопрос со всеми его аспектами.