Поддержка Java TCP для главного сервера - PullRequest
1 голос
/ 02 июня 2010

Контекст : Главный сервер (Java, TCP) отслеживает список размещенных игр (разные машины для главного сервера и для каждого размещенного игрового сервера). Любой пользователь может разместить игру на своем ПК. Размещенные игры могут длиться недели или месяцы.

Необходимость: Информация о том, когда размещенные игровые серверы закрыты или более недоступны.

Ограничение 1: Невозможно полагаться на "ушедшее в автономном режиме сообщение об обновлении" на размещенных серверах, поскольку эти сообщения могут никогда не появиться (отключение питания, отключение интернет-канала и т. Д.)

Ограничение 2: Я не уверен насчет встроенной поддержки активности TCP, так как это будет означать открытый сокет 24/7 с каждым размещенным сервером (поправьте меня, если я ошибаюсь)

Есть мысли?

Ответы [ 2 ]

3 голосов
/ 02 июня 2010

Подумайте об использовании каких-то сообщений сердцебиения. Эти сообщения («Я жив!») Отправляются регулярно, и если главный сервер не получает сообщение пульса от размещенного сервера (в течение определенного времени), он знает, что этот размещенный сервер недоступен.

Вы даже можете добавить некоторые параметры состояния в это сообщение, если вам нужна более подробная информация с размещенных серверов (например, «полностью работоспособен», «отключен для обслуживания через 5 минут» и т. Д.)

1 голос
/ 02 июня 2010

Звучит так, как будто вы столкнулись с так называемой «проблемой двух армий», «проблемой скоординированных атак» или, как отметил Андреас Д., проблемой двух генералов , которую вы определили как ваше ограничение 1. Идея, стоящая за этой проблемой, заключается в том, что две армии хотят скоординировать атаку на врага, и они должны атаковать одновременно, так как каждая армия знает, что они умрут, если они нападут самостоятельно.

Проблема заключается в следующем: как армия узнает, что ее посланник, который проводит время, предназначенное для скоординированной атаки, успешно достиг другой армии? Кроме того, как вторая армия может быть уверена, что первая армия знает, что она получила сообщение, и планирует атаковать? Возможно, что любое сообщение между армиями не будет успешно доставлено, и поэтому армии никогда не могут быть уверены, что они правильно скоординированы.

Из-за этого самый простой ответ может заключаться в том, чтобы просто проверять каждую запущенную игру с запланированным интервалом, а также всякий раз, когда пользователь запрашивает обновление. Вы можете использовать эту информацию для заполнения своего основного списка.

...