Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сериализация, наверное, не знаю как тему назвать правильно 
:(
    Опции темы
georain
Дата 20.2.2008, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 28.11.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
2) Количество типов классов может быть любым (не ограничено размером числа, задающего тип)

Ну если на то пошло, то хеш имени может оказаться одинаковым для двух каких-нибудь классов.  smile  Или ты предлагаешь вместе с каждым классом полностью его имя слать?

Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
3) Полная проверка на этапе сериализации, что CREATE_FABRIC не забыли указать (увы, может не сработать при раздельных sender'е и reviever'е)

Проверять надо на этапе компиляции, а на этапе сериализации это накладно. К тому же классы отправителя и принимателя будут иметь разную реализацию, т.е. либо там либо там можно забыть написать CREATE_FABRIC.

Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
4) Не нужен никакой switch и никакая другая централизованная обработка - потенциальное место где можно забыть что-то добавить.

Ну у меня вообще свича нет  smile , проверяй тока что в диапазон массива попадает и всё, а вот проверка и поиск хеша в map уже накладнее.

Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
1) Не надо добавлять никаких enum'ов, ID и пр.

Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
5) CREATE_FABRIC - это ЕДИНСТВЕННОЕ что добавляется при сериализации нового класса

Это факт, спору нет.

Тут есть и плюсы и минусы, в равной степени, но реализация толще и главная причина, будет тяжело обойти проблему, если имена классов на разных сторонах будут различаться.
PM MAIL   Вверх
marcusmae
Дата 20.2.2008, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 5
Всего: 39



Цитата(georain @  20.2.2008,  01:38 Найти цитируемый пост)
развеселил, хохот в час ночи. Возможно это даже будет работать, но мне кажется это не очень кроссплатформенно, этож на win-lin-mac-bsd-и.т.д. должно работать, а разный порядок байтов на разных машинах, сомнительное предложение, но прикольно!


georain, ну что за чушь? smile Ну работает твой клиент на винде, а сервер - на маке, и что? = Ну и скомпилируй клиентскую программу не только для винды, но и для мака (раз она у Вас такая кроссплатформенная) и передай на сервер маковый вариант. Не вижу никакой проблемы, всё будет работать. Единственное, нужно будет подобрать аналог для LoadLibrary и GetProcAddress, но это штучная доделка. Кажется Вы просто чем-то себе сильно забили голову... smile

Это сообщение отредактировал(а) marcusmae - 20.2.2008, 11:22


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
xvr
Дата 20.2.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(georain @ 20.2.2008,  09:11)
Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
2) Количество типов классов может быть любым (не ограничено размером числа, задающего тип)

Ну если на то пошло, то хеш имени может оказаться одинаковым для двух каких-нибудь классов.  smile  Или ты предлагаешь вместе с каждым классом полностью его имя слать?

Да. При приеме проверять, если для данного значения хэша есть более одного имени - проверять имя, если только одно - игнорировать. Хэш можно подобрать (в том числе и run-time), что бы минимизировать количество коллизий. Например, если в качестве хэша использовать CRC16, то можно выбрать один из нескольких порождающих полиномов.

Цитата

Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
3) Полная проверка на этапе сериализации, что CREATE_FABRIC не забыли указать (увы, может не сработать при раздельных sender'е и reviever'е)

Проверять надо на этапе компиляции, а на этапе сериализации это накладно. 
Да, это имеет смысл  smile Можно поиграться с содержимым макроса CREATE_FABRIC, тут были подходящие идеи.

Цитата

К тому же классы отправителя и принимателя будут иметь разную реализацию, т.е. либо там либо там можно забыть написать CREATE_FABRIC.
Да, это проблема.

Цитата

Цитата(xvr @  20.2.2008,  08:48 Найти цитируемый пост)
4) Не нужен никакой switch и никакая другая централизованная обработка - потенциальное место где можно забыть что-то добавить.

Ну у меня вообще свича нет  smile , проверяй тока что в диапазон массива попадает и всё, а вот проверка и поиск хеша в map уже накладнее.
Хэш надо искать не в map'е а делать массив в 64К входов (для 16ти битного хэша) и прямо индексировать

Цитата

Тут есть и плюсы и минусы, в равной степени, но реализация толще и главная причина, будет тяжело обойти проблему, если имена классов на разных сторонах будут различаться.
Реализация самого framework'а действительно толще, но применять ее удобнее. Что касается разных имен классов, то они НЕ ДОЛЖНЫ быть разными, и это можно проверить (run-time), например отсортировать массив всех зарегистрированных в сериалайзере типов, затем скормить их посимвольно в CRC32, отправить с пакетом и сравнить на приемном конце. Кстати, так же можно договорится о использованном в передатчике хэше.

PM MAIL   Вверх
Dimonius
Дата 21.2.2008, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 11.10.2006

Репутация: нет
Всего: 1



Если все классы, которые приходят по сети наследуются от одного родительского, то здесь следует применить шаблон проектирования Factory Method, который позволит внести в программу желаемую расширяемость и управляемость. Если нужен пример кода, то на досуге напишу.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.