Хотел бы узнать, для псевдомультипоточности что быстрее работает для получения файлов, multiHttp (такая функция на php.net на сокетах) или curl в цикле for? Только не говорите засечь - это не идеальный способ для такого вида экспериментов
Имхо, в контексте получения данных по сети разница между curl и socket незначительная. А вот с multiHttp не знаком, может там, конечно, и добились того, чтобы она тормозила с достаточным качеством.
PHP: function multiHTTP ($urlArr, $max_threads, $sleep_time) { $sockets = Array(); // socket array! $urlInfo = Array(); // info arr $retDone = Array(); $retData = Array(); $errno = Array(); $errstr = Array(); if (count($urlArr)<$max_threads) $max_threads=count($urlArr); #echo"макс потоков: $max_threads<br>\n"; #for ($x=0;$x<count($urlArr);$x++) { $i=1; foreach ($urlArr as $key => $url){ $done_socket=false; if (($max_threads > count($sockets))&&(!$done_socket)){ #echo"добавляю в поток урл с кеем $key<br>\n"; $urlInfo[$key] = parse_url($urlArr[$key]); $urlInfo[$key]['port'] = ($urlInfo[$key]['port']) ? $urlInfo[$key]['port'] : 80; $urlInfo[$key]['path'] = ($urlInfo[$key]['path']) ? $urlInfo[$key]['path'] : "/"; $sockets[$key] = fsockopen($urlInfo[$key]['host'], $urlInfo[$key]['port'], $errno[$key], $errstr[$key], 30); socket_set_blocking($sockets[$key],FALSE); $query = ($urlInfo[$key]['query']) ? "?" . $urlInfo[$key]['query'] : ""; fputs($sockets[$key],"GET " . $urlInfo[$key]['path'] . "$query HTTP/1.0\r\nHost: " . $urlInfo[$key]['host'] . "\r\n". "Referer: [url=http://www.google.com]http://www.google.com[/url]\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n" ); #echo"$i;<br>"; if (count($urlArr)==$i) $done_socket=true; } if (($max_threads == count($sockets)) or ($done_socket)){ $done=false; $x=1; foreach ($sockets as $key => $url){ #echo"читаю сокет с кеем $key<br>"; $done=false; while (!$done){ if (!@feof($sockets[$key])) { if ($retData[$key]) { $retData[$key] .= @fgets($sockets[$key],1000); } else { $retData[$key] = @fgets($sockets[$key],1000); } } else { $x++; #echo"прочитан сокет с кеем $key $x<br>\n"; $done=true; } /*if (count($sockets) == $x) {$done=true; echo"<h1>есть</h1>";}*/ } } unset($sockets); } sleep($sleep_time); $i++; } // ok read the data from each one #$done = false; #sleep(0.1); return $retData; }