Как организовать параллельный пинг локальных машин с нескольких серверов с помощью PHP?
Доброго времени суток всем. Есть большая сеть, в ней ~1000 машин. Имеется несколько серверов, на которых стоит PHP с Apache на MS Windows Server, есть 2 БД MS SQL, задача в том, чтобы пинговать все машины в сети и рисовать карту сети, с рисованием проблемы нет, вопрос в том как их все пинговать?
Изначально задача минимум была с 1 сервером и 1 бд, пинговал их все последовательно через exec(ping...) раз в нное количество времени, писал в бд, потом оттуда читал, занимало довольно(даже очень) много времени, пытался делать разными потоками через curl_multi, но т.к. по http почти все машины не видны, 99% машин отвечают OFFLINE.
Как организовать параллельный пинг всех машин хотя бы с 1 сервера? Насколько я понял pthreads использовать можно только на linux-сервере, в моем же случае это MS. Можно ли реализовать exec(ping...) многопоточно?
Задача максимум - разбить пинг машин на несколько серверов, писать в базы (реплики), заходить на морду с одного сервера, читать инфу из бд и уже отрисовывать. Необходимо минимизировать время пинга. Однако стоит учесть что пинг всех машин должен идти постоянно, то есть если машина отключилась, должно быть это видно максимально быстро.
Честно говоря, когда столкнулся с этой задачей подумал что это далеко не задача PHP и вовсе не для этого он нужен, однако задача есть, и решение необходимо, а мой вариант с последовательным пингом занимает непростительно много времени. Так же хочу отметить что необходимо использовать только нативные средства, как бы абсурдно это ни было. Нет возможности использовать такие инструменты как nagios и т.д.
но как внутри одной задачи организовать параллельный пинг? Допустим у меня 3 сервера, могу каждому дать список из 300 машин на пинг, и каждый сервер будет пинговать их последовательно. И мы сводим задачу к задаче минимум - как распараллелить пинг машин для одного сервера? Что будет если их не 1000, а 10000, по 3333 на сервер...
Влад: Создаете нужное кол-во воркеров(например в цикле), запускаете. Вторым скриптом(client) также плодите нужное кол-во задач в цикле. Запускаете. Дальше гирман сделает все сам. Как-то так.