
19.09.2007, 22:20
|
|
Участник форума
Регистрация: 08.02.2007
Сообщений: 162
Провел на форуме: 463978
Репутация:
34
|
|
Вот еще нашел пример помогите кто-нибудь подробно разобраться неплохая может статья выйдет.... мало где нашел подробное описание.... Я конешно понимаю надо смотреть каменты и т.п. ,но все таки когда теретически понимаешь как это организуется, только тогда появлятся возможность написать что-то свое...
PHP код:
< ?php
$hosts = array("host1.sample.com", "host2.sample.com");
$timeout = 15;
$status = array();
$sockets = array();
/* Инициируем соединения ко всем хостам одновременно */
foreach ($hosts as $id => $host) {
$s = stream_socket_client("$host:80", $errno, $errstr, $timeout,
STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
if ($s) {
$sockets[$id] = $s;
$status[$id] = "in progress";
} else {
$status[$id] = "failed, $errno $errstr";
}
}
/* Теперь ожидаем результат */
while (count($sockets)) {
$read = $write = $sockets;
/* Вот она - магическая функция - пояснения ниже */
$n = stream_select($read, $write, $e = null, $timeout);
if ($n > 0) {
/* доступные для чтения сокеты готовы отдать нам данные
или попытка провалилась
*/
foreach ($read as $r) {
$id = array_search($r, $sockets);
$data = fread($r, 8192);
if (strlen($data) == 0) {
if ($status[$id] == "in progress") {
$status[$id] = "failed to connect";
}
fclose($r);
unset($sockets[$id]);
} else {
$status[$id] .= $data;
}
}
/* доступные для записи сокеты могут принимать
HTTP-запросы
*/
foreach ($write as $w) {
$id = array_search($w, $sockets);
fwrite($w, "HEAD / HTTP/1.0rnHost: "
. $hosts[$id] . "rnrn");
$status[$id] = "waiting for response";
}
} else {
/* ожидаем таймаут; подразумевается, что все сокеты,
ассоциированные с массивом $sockets не сработали
*/
foreach ($sockets as $id => $s) {
$status[$id] = "timed out " . $status[$id];
}
break;
}
}
foreach ($hosts as $id => $host) {
echo "Host: $hostn";
echo "Status: " . $status[$id] . "nn";
}
?>
Помогите расписать по блокам...Вписываю какие-нибудь сайты,запускаю и все виснет...
Последний раз редактировалось Darkweider; 19.09.2007 в 22:56..
|
|
|