2013-02-26 3 views
3

Я ищу хороший способ опроса большого количества серверов для их статуса через TCP. В настоящее время я использую синхронный код и протокол Minecraft Query Protocol, но всякий раз, когда сервер находится в автономном режиме, остальная часть очереди задерживается.Как я могу эффективно опросить множество серверов?

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

Я использую реки задачу на Ruby с бесконечным циклом, в котором каждый сервер Minecraft в моей базе данных MongoDB получает проверяется и обновляется каждые + - 10 минут (я пытаюсь установить этот интервал, позволяя выдержать паузу Петли (600/ s.count.to_i).ceil секунды

.

есть ли способ, что я могу сделать эту задачу эффективно (и предотвратить сервера из черных списков моих IP в их брандмауэре), желательно с асинхронным кодом в Рубине

ответ

4

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

This question содержит много информации о многопоточности в Ruby - вы должны иметь возможность одновременно создавать несколько параллельных потоков или, по крайней мере, использовать неблокирующие сокеты.

Еще один момент, заданный @Lie Ryan, вы можете использовать IO.Select для опроса массива серверов, все сразу. Он вернет массив «онлайн» серверов, когда это будет сделано - это может быть более элегантным, чем нерестование нескольких потоков.

+1

, а не многопоточность, обычно лучше использовать IO.select. –

+0

Мне нравится метод IO.Select. Должен ли я просто выполнить строку ввода IO.Select, скажем, через 10 минут? – kiwiboom

+0

Вы можете сделать это, убедитесь, что предыдущая проверка уже окончена. –

Смежные вопросы