Сериализация сетевых сообщений для игры - PullRequest
4 голосов
/ 27 декабря 2010

Exit-игры делают продукт сетевой библиотеки под названием photon, и они активно развивают ограниченную демоверсию mmo.Вместо того, чтобы снимать json, XML и т. Д., Говоря «MovePlayer» (со связанными параметрами), они преобразуют это сообщение до двухзначного int через enum - что-то вроде Operations.MovePlayer.Нельзя отрицать, что двузначное целое число меньше, чем более длинная строка, однако я действительно ненавижу идею статически записывать каждое сообщение в перечисление.

Был бы альтернативный способ присвоения свойства MessageIDсам по себе уникальный 2-х значный int, основанный на таблице поиска или что-то?Кто-нибудь имел дело с такими вещами раньше?

Ответы [ 2 ]

3 голосов
/ 23 июня 2011

Для игр это не «старый» способ ведения дел - это норма.

Это связано с тем, что, в отличие от типичных веб-сервисов, где сервер отправляет данные клиента короткими, редкие пакеты, в играх сервер и клиент отправляют пакеты туда и обратно постоянно . Количество пакетов, необходимое для синхронизации состояния каждого клиента с воздушными шарами друг друга в геометрической прогрессии с количеством игроков, поэтому чем больше игроков будет в вашей игре, тем важнее сохранять размер пакета небольшим.

Также при превышении размера MTU (обычно около 1400 байт) приведет к фрагментации пакета, что может оказать существенное влияние на производительность.

Обратите также внимание, что Microsoft имеет ограничение на загрузку и выгрузку в 8 килобайт в секунду для игр, созданных для XBox 360, поэтому вы почти не можете создать MMO, используя XML для сетевых сообщений.


Что касается того, как преобразовать байт в тип сообщения: просто используйте оператор switch или сохраните Dictionary<byte, Type> или Dictionary<byte, Func<Message>> (при условии, что у вас есть набор классов сообщений, которые все происходят из базовый класс Message)

1 голос
/ 27 декабря 2010

Это действительно старый способ ведения дел, напоминающий мне 80-е годы.

Моя компания использует Агату (брокер запросов) для обмена сообщениями в нашей ММО:

http://davybrion.com/blog/2009/11/hello-world-with-agatha/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...