Предположим, я работаю над многопользовательской онлайн-игрой. Каждая группа игроков может начать экземпляр игры, чтобы играть. Возьмем для примера League of Legends.
В любой момент одновременно проводится множество игровых матчей. Мой вопрос об архитектуре этого дела. Вот мои предложения:
Предположим, у нас есть облако со шлюзом. Любой игровой экземпляр требует игрового сервера за этим шлюзом для обслуживания игры. Для разных клиентов вне облака для доступа к различным игровым серверам в облаке шлюз может различать соединения в зависимости от портов. Как будто у нас одна машина с множеством процессов, каждый из которых прослушивает другой порт.
Это лучшее, что мы можем получить?
Есть ли у шлюза другой способ разграничить соединения и перенаправить их в разные игровые экземпляры?
Обратите внимание, что это сокет-соединения, а не HTTP-запросы к API-шлюзу.
РЕДАКТИРОВАТЬ 1: Этот вопрос не о балансировке нагрузки
Ключевое слово: ports . Будет ли каждый матч обслуживаться в другом порту? или есть другой способ обслуживания нескольких служб на одном хосте (host = IP)?
Разработка: я использую модель клиент-сервер для каждого экземпляра матча. Таким образом, несколько клиентов могут подключаться к одному и тому же серверу совпадений, чтобы участвовать в одном совпадении. Каждое совпадение должно быть сервером совпадения.
Имеется ограничение: один хост (= IP) для обслуживания нескольких сервисов должен предоставлять их на разных портах. Матч 1 на порту 1234. Таким образом, клиенты, участвующие в матче 1, будут подключаться к серверу матчей и взаимодействовать с ним через порт 1234.
РЕДАКТИРОВАТЬ 2: Масштабируемость является целью
Мой сервер совпадений не рассчитывает и не поддерживает мир множества совпадений. Он поддерживает мир одного матча. Вот почему каждому совпадению нужен другой экземпляр сервера совпадений. Нельзя масштабировать, чтобы все клиенты сообщали о разных совпадениях, чтобы подключиться к одному процессу и обрабатываться одним процессом.
Моя идея состоит в том, чтобы обслуживать мир каждого матча разными процессами. Это потребует от каждого процесса прослушивания через другой порт.
Пример: Любой клиент запустит TCP-соединение с сервером, прослушивающим порт A. Есть ли способ обслуживать несколько MatchServer на одном и том же порту A (чтобы больше одновременных MatchServers не приводило к в больше портов)?
Есть ли лучший масштабируемый способ обслуживать разные миры нескольких матчей?