Text Size

Сравнение систем для сериализации

В этом бенчмарке я сравнил стандартные и встроенные в Flexible Game Server системы сериализации. Все видно по диаграмме.

Автосинхронизация вырывается вперед

Преимущества игрового сервера Flexible Game Server

  1. Если Вы разрабатываете собственное сетевое решение, то Flexible Game Server сохранит Ваше время
    Движок можно тонко настраивать и даже заменять часть функциональности своей реализацией. Вместо написания собственного решения с нуля, можно использовать FGS в качестве каркаса. Его гибкость дает возможность воплотить любую идею.
  2. Прямая связь с автором
    Этот движок появился сравнительно недавно, а значит напрямую связаться с автором, т.е. со мной, не просто возможно, а очень просто!
    Существует ли другое сетевое решение, при использовании которого вы можете связаться с его автором и попросить дополнить или исправить функционал в каком-либо месте? Скорее всего, придется продираться через толпу людей из техподдержки и, не факт, что ваше сообщение вообще когда-нибудь дойдет до разработчиков!
  3. Возможность использовать FGS в любой игре или программе на .NET
    Для использования движка не требуется запуск отдельных исполняемых файлов. Вы просто подключаете библиотеки к своему .NET приложению и запускаете сервер!

Синхронный протокол комнат «Rooms2»

Система полезна для использования совместно с другими протоколами, когда необходимо только распределение клиентов по комнатам.

Пространства имен:

  • FlexibleGameServer.Rooms2

Объекты протокола:

  • Комната (класс Room)
    Создается и управляется сервером, «содержит» список клиентов. Так же комната «сообщает» своим клиентам о других клиентах, в ней находящихся.
    Имеет информацию (тип с интерфейсом ICustomSerializable) и id.

    Комната может быть публичной (присутствовать в списке), доступной или нет для посещения. Есть возможность указать ограничение на максимальное количество клиентов.
    По умолчанию информация о клиенте содержит структуру RoomDefaultPublicInfo, в которой хранится название комнаты.

Защитные механизмы сервера

Шифрование

Передача ключа DES, зашифрованного асимметричным ключом RSA и последующая прозрачное шифрование передаваемых данных. Это ресурсоемкий механизм, не рекомендуется к использованию на нагруженных серверах.
Требуется платная версия.

Anti-DoS система

Некоторые отличия от Unity Networking

В Unity Networking сервером является Unity приложение одного из игроков. Такой игрок должен иметь «белый» IP адрес, чтобы другие игроки могли соединиться с ним. Это может повлечь дополнительные трудности, когда игрок подключается через шлюз (NAT) или входящие соединения блокируются фаерволом.

В FGS не предусмотрено возможности запускать сервер на стороне игрока. Сервер работает на отдельном компьютере в сети. Но это не означает, что для использования FGS нужно искать отдельную реализацию игровой физики. Вы можете запустить сервер из Unity Standalone приложения (в batchmode) и использовать привычные возможности Unity в серверном приложении.

Про авторитарность сервера

Существует два типа организации сетевого взаимодействия между клиентом и сервером.

Первый – каждый клиент сам производит все необходимые расчеты и отсылает результат серверу, который, в свою очередь, исполняет роль ретранслятора, передавая информацию всем остальным клиентам. Если бы я писал эту документацию на английском языке, то непременно назвал бы такой сервер «глупым», так как, по сути, он ничего не делает, кроме приема и передачи информации. Клиент может передавать абсолютно любую ложную информацию и сервер без вопросов перенаправит её всем остальным игрокам.

Принципы приема и передачи пакетов

И так, как выглядят стандартная схема передачи пакетов?

Чтобы передать несколько значений, например, уровень игрока (целое число), его состояние (активен или нет), и ник (строка), обычно передают пары ключ-значение. Некоторые системы дополнительно передают тип каждого значения. Ко всему этому еще добавляют длину пакета, время отправки и номер (который абсолютно не нужен для TCP соединений!).

С чего начать?

Начните с просмотра видео туториалов, изучения пространства имен ObjectsNetworkingModel (или Unity3d.Networking для Unity).

Для запуска ONP сервера используйте класс StandaloneServer или (для Unity) компонент FGSServer. Для установки соединения на клиенте используйте StandaloneClient или FGSSessionClient соответственно.

Базовые элементы модели - объект и компонент. Объект - это экземпляр класса  ServerPoint для сервера (или ClientPoint для клиента).

Объект может иметь до 256 компонентов, каждый из которых должен присутствовать как на клиентском, так и на серверном объекте(порядок компонентов также должен совпадать).

Для Unity каждый серверный объект следует хранить в виде префаба, имеющего Id (т.н. PrototypeId). Используйте свойство InstantiateOnClientRegistered для создания экземпляра такого объекта при присоединении клиента. Клиент автоматически станет владельцем созданного объекта.

Чтобы создать прототип объекта в редакторе Unity, используйте меню FGS -> Add Point. Компоненты наследуются от ClientObservedComponent или ServerObservedComponent.

На стороне клиента префабы объектов должны быть размещены в ячейках с индексам, который соответствует PrototypeId для данного объекта. При создании серверного объекта клиент получает PrototypeId созданного ServerPoint, который используется в качестве индекса для поиска создаваемого ClientPoint-объекта в списке RemotePrototypes.

Создание серверного объекта средствами клиента не предусматривается, так как это идет в разрез с принципом авторитарности сервера. Любой объект должен быть создан на сервере и только после этого он будет создан на клиенте.
Для быстрого доступа в Unity к экземплярам FGSSessionClient и FGSServer используйте  статические свойства классов FGSNetworking и FGSServerNetworking.

Для Visual Studio используйте аналогичные свойства экземпляров StandaloneServer и StandaloneClient, но вместо префабов создание объектов выполняется с помощью делегатов.

Описания соответствующих классов смотрите в документации.

Подкатегории

Страница 1 из 2

Тестовая версия

СКАЧАТЬ БЕСПЛАТНО

Тестирование началось!

Пришло время испытать движок.

Пишите Ваши предложения, найденные ошибки и feedback на Этот адрес электронной почты защищен от спам-ботов. У вас должен быть включен JavaScript для просмотра. или в Skype (vbprogr).

Документацию вы найдете на этом сайте.