Я пингую массив из 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 секунд?
Любые предложения приветствуются.
Спасибо
PHP не будет медленной частью здесь, система ping
команда будет. Рассмотрим наихудший сценарий, когда все хосты отключены. Вы будете иметь минимальное время ожидания TTL * NumHosts.
Лучшим решением было бы запустить фоновый процесс, который пингует хосты каждые X секунд и обновляет какой-либо маркер состояния (плоский файл, таблица базы данных и т. Д.). Находящаяся наружу страница мгновенно прочитает эти маркеры состояния, и информация никогда не будет старше X секунд. Это также имеет дополнительное преимущество, заключающееся в потенциальном снижении нагрузки на сервер и целевые хосты за счет ограничения количества проверок.
Если эта установка не является жизнеспособным вариантом, лучше всего возиться с ping
варианты или найти другой инструмент.
Других решений пока нет …