oRb
26.05.2009, 20:20
Кто прочел название треда, наверняка подумали "нахрена этот очередной боян?". Так вот задачей было - разобраться с "Process Control support in PHP", т.е. научиться использовать не псевдомногопоточность (через крон, пул неблокирующих сокетов, etc), а нормальное создание процесса в стиле Unix.
Ограничения:
[#] под виндой работать не будет
[#] php нужно собирать с опцией --enable-pcntl
Фунционал:
[#] head запросы
[#] каждый поток открывает всего одно Keep-Alive соединение
[#] можно указать при каких кодах ответов путь будет считаться несуществующим.
[#] можно указать при каких значениях поля location путь будет считаться несуществующим.
[#] для каждого потока юзер-агент берется рандомно.
Пример работы (канал 2 мб/с, в базе было 99 юрлов, 5 потоков):
# /usr/bin/php index.php php.su
Host: php.su
Ip: 82.140.91.131
Port: 80
Start: 26-05-2009 19:41:17
# GO GO GO!
[+] 500 - phpmyadmin/
[+] 200 - info.php
[+] 302 - images/
[+] 200 - icons/
Finish: 26-05-2009 19:41:19
Links:
[#] http://ru2.php.net/manual/ru/intro.pcntl.php
[#] быдлокод в аттаче
ps: есть пока 1 бага/фича, с которой не разобрался. После завершения первого потока, скрипт отвязывается от терминала. Если кого-то это смущает, можно перенаправить вывод в файл.
Ограничения:
[#] под виндой работать не будет
[#] php нужно собирать с опцией --enable-pcntl
Фунционал:
[#] head запросы
[#] каждый поток открывает всего одно Keep-Alive соединение
[#] можно указать при каких кодах ответов путь будет считаться несуществующим.
[#] можно указать при каких значениях поля location путь будет считаться несуществующим.
[#] для каждого потока юзер-агент берется рандомно.
Пример работы (канал 2 мб/с, в базе было 99 юрлов, 5 потоков):
# /usr/bin/php index.php php.su
Host: php.su
Ip: 82.140.91.131
Port: 80
Start: 26-05-2009 19:41:17
# GO GO GO!
[+] 500 - phpmyadmin/
[+] 200 - info.php
[+] 302 - images/
[+] 200 - icons/
Finish: 26-05-2009 19:41:19
Links:
[#] http://ru2.php.net/manual/ru/intro.pcntl.php
[#] быдлокод в аттаче
ps: есть пока 1 бага/фича, с которой не разобрался. После завершения первого потока, скрипт отвязывается от терминала. Если кого-то это смущает, можно перенаправить вывод в файл.