Многое зависит от того, сколько данных вы хотите поделиться между серверами. Вы хотите, чтобы каждый сервер обрабатывал свой собственный домен, но как насчет базы данных учетных записей, данных о том, кому какая информация принадлежит, топографии доменов, будут ли эти данные центральными и / или распределенными и как вы будете их синхронизировать? Таким образом, помимо работы в игре, существует еще один набор метаданных, о которых серверы должны сообщать. Что касается игровых данных, вы, вероятно, будете передавать события, объекты данных и информацию о владении данными и управлении ими. Помимо этого, для синхронизации времени доменов должны быть некоторые метаданные игровых часов.
Я бы, вероятно, использовал систему асинхронных очередей с разными приоритетами для метаданных, запросов и ответных сообщений. Протокол типа XMPP поверх обмена сообщениями может принести вам информацию о присутствии, аутентификацию, шифрование и другие преимущества. Но с самого начала сам протокол доставки не так важен, как структура сообщений и обмен данными. По сути, протоколы доставки являются взаимозаменяемыми.
Пример : Один игрок отправляет игровое устройство X из домена A в домен B. Сервер домена A отправляет сообщение с событием на сервер домена B. При обработке очереди событий B получает сообщение и отправляет запросы в очередь запросов на A для получения данных о модуле X и разрешения на управление / изменение данных блока X. Очередь запросов имеет более высокий приоритет и будет обрабатываться раньше других событий в домене A Домен A отправляет запрошенные данные и управляющий токен в очередь ответов домена B с наивысшим приоритетом. Между тем сервер домена B уже обработал 3 других события, не ожидая в сеансе.
- Примечание: A должен устареть, версии или удалить данные об устройстве X на этом этапе. Если поступает запрос данных из домена C, он должен направить этот запрос на сервер B с этого момента.
- Примечание: Приведенный выше пример может быть оптимизирован для прямой отправки данных о блоке X с соответствующим событием, но я хотел показать простой пример.
Важно то, что вам придется разработать протокол инкапсуляции данных, возможно, некоторую XML-схему. Протокол для обработки событий. Список событий, разрешенные ответы, сообщения об ошибках, восстановление. Все это зависит от игры.