Я пытаюсь создать общий сервер для всегда подключенных клиентов.Дизайн шлюза игрового сервера
Архитектура состоит из 4 основных компонентов
- Stateful App Серверы Серверы
- Безгражданства шлюза
- Клиенты
- системы массового обслуживания и брокеры
проточного процесса
- Клиент подключается к шлюзу
- Шлюз принимает как передает идентификатор сеанса обратно клиенту
- Клиент отправляет сообщение на шлюз
- Шлюз записывает запрос на сообщение/Task Queue
- Демон читает сообщений в очереди и пересылает их в гнездо для прослушивания сервера приложений
- Сервер приложений запускает сообщение через свою бизнес-логику
- Сервер приложений затем в более поздней точке отправляет связанное сообщение клиенту в очередь шлюза
- Поток на шлюзе считывает сообщения в своей входящей очереди и затем отправляет сообщения обратно клиентам, указанным в сообщении.
- Шлюз поддерживает карту идентификатор сеанса клиента к объекту сокет клиента для пересылки входящих сообщений на клиентские сокеты
Я использую Java Нетти для шлюза. Сервер приложений также находится на Java.
У меня возникает соблазн сказать, что дизайн похож на Mongrel2, но я не совсем уверен. Я бы сказал, что это больше похоже на дизайн краевого сервера гелия Urban Airship (http://urbanairship.com/blog/2010/08/24/c500k-in-action-at-urban-airship/)
Мой вопрос: - Используется поток для чтения сообщений из входящей очереди, а затем пересылка их клиентам хорошая идея? Есть ли лучший способ справиться с этим?
Термин «рабочие» приходит в голову – Kristian
Как термин «рабочий» помогает мне отправлять сообщения обратно клиентам после чтения из входящей очереди? – kopos