PHP эффективность пинг массив машин

Я пингую массив из 12 машин ip address и отображение статуса (хост активен или нет) в простом веб-интерфейсе.
Это код, который у меня сейчас есть —

$hosts = array ("192.168.0.100","192.168.0.101","192.168.0.102"); //etc..

foreach ($hosts as $hosts) {
exec ("ping -i 1 -n 2 -l 1 $hosts", $ping_output);
if(preg_match("/Reply/", $ping_output[2])) {
echo "$hosts replied! <br />";
} else {
echo "$hosts did not reply! <br />";
}
}

Это работает, но не очень хорошо масштабируется. Мне нужно подождать около 15 секунд, прежде чем страница загрузится, потому что она проверяет все машины и требует времени. Я уменьшил количество пингов до 2-х ответов, а также уменьшил размер буфера.

Есть ли лучший подход к этому? Более эффективным? Лучше, чем 15 секунд?
Любые предложения приветствуются.

Спасибо

2

Решение

PHP не будет медленной частью здесь, система ping команда будет. Рассмотрим наихудший сценарий, когда все хосты отключены. Вы будете иметь минимальное время ожидания TTL * NumHosts.

Лучшим решением было бы запустить фоновый процесс, который пингует хосты каждые X секунд и обновляет какой-либо маркер состояния (плоский файл, таблица базы данных и т. Д.). Находящаяся наружу страница мгновенно прочитает эти маркеры состояния, и информация никогда не будет старше X секунд. Это также имеет дополнительное преимущество, заключающееся в потенциальном снижении нагрузки на сервер и целевые хосты за счет ограничения количества проверок.

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

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]