2012-04-16 1 views
3

Я пытаюсь создать общий сервер для всегда подключенных клиентов.Дизайн шлюза игрового сервера

Архитектура состоит из 4 основных компонентов

  • Stateful App Серверы Серверы
  • Безгражданства шлюза
  • Клиенты
  • системы массового обслуживания и брокеры

проточного процесса

  1. Клиент подключается к шлюзу
  2. Шлюз принимает как передает идентификатор сеанса обратно клиенту
  3. Клиент отправляет сообщение на шлюз
  4. Шлюз записывает запрос на сообщение/Task Queue
  5. Демон читает сообщений в очереди и пересылает их в гнездо для прослушивания сервера приложений
  6. Сервер приложений запускает сообщение через свою бизнес-логику
  7. Сервер приложений затем в более поздней точке отправляет связанное сообщение клиенту в очередь шлюза
  8. Поток на шлюзе считывает сообщения в своей входящей очереди и затем отправляет сообщения обратно клиентам, указанным в сообщении.
  9. Шлюз поддерживает карту идентификатор сеанса клиента к объекту сокет клиента для пересылки входящих сообщений на клиентские сокеты

Я использую Java Нетти для шлюза. Сервер приложений также находится на Java.

У меня возникает соблазн сказать, что дизайн похож на Mongrel2, но я не совсем уверен. Я бы сказал, что это больше похоже на дизайн краевого сервера гелия Urban Airship (http://urbanairship.com/blog/2010/08/24/c500k-in-action-at-urban-airship/)

Мой вопрос: - Используется поток для чтения сообщений из входящей очереди, а затем пересылка их клиентам хорошая идея? Есть ли лучший способ справиться с этим?

+0

Термин «рабочие» приходит в голову – Kristian

+0

Как термин «рабочий» помогает мне отправлять сообщения обратно клиентам после чтения из входящей очереди? – kopos

ответ

0

Возможно, вы знаете, что этот тип приложений уже существует с точки зрения облачных сервисов, поэтому вам не нужно изобретать колесо. Найдите сайт hp.com.

+0

Что именно я могу найти на веб-сайте hp.com? – kopos