Вы не зашли.
TLENS   Off  (14)
Moderator
2014.03.02 05:05
Gemorroj curl_multi по результатам моих тестов во много раз медленнее чем напрямую работать с сокетами
Код:
span style="color: #0000BB"><?php$t = microtime(true);$mh = curl_multi_init();$ch = array();for ($i = 0; $i < 1000; $i++) { $ch[$i] = curl_init(); // устанавливаем URL и другие соответствующие опции curl_setopt($ch[$i], CURLOPT_URL, "http://www.youtube.com/"); curl_setopt($ch[$i], CURLOPT_HEADER, 0); curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle($mh, $ch[$i]);}$active = null;//запускаем дескрипторыdo { curl_multi_exec($mh, $running); curl_multi_select($mh);} while ($running > 0);//закрываем дескрипторыforeach ($ch as $i=>$v) { curl_multi_remove_handle($mh, $ch[$i]);}curl_multi_close($mh);echo "curl_multi: " . (($t2 = microtime(true)) - $t)."\n";$sockets = array();$results = array();$results = array();for ($i = 0; $i < 1000; $i++) { $results[$i] = ''; $errors[$i] = ''; $sockets[$i] = socket_create(AF_INET, SOCK_STREAM, 0); socket_set_nonblock($sockets[$i]); @socket_connect($sockets[$i], 'www.youtube.com', 80);}$error = $write = $sockets;$read = array();do { $e = $error; $w = $write; $r = $read; if (sizeof($r) == 0 && sizeof($w) == 0) break; if (($select = socket_select($r, $w, $e = null, 0)) < 0) { //echo 'continue'."\n"; continue; } //echo "read: " . sizeof($r) . ', write: ' . sizeof($w) . "\t\t"; foreach ($w as $k=>$sock) { socket_write($sockets[$k], "GET / HTTP/1.0\nHost: www.youtube.com\nConnection: close\n\n"); $read[$k] = $sockets[$k]; unset($write[$k]); } foreach ($r as $k=>$sock) { $buff = socket_read($sockets[$k], 10240); if ($buff !== false) { if ($buff) $results[$k] .= $buff; else unset($read[$k]); } else { socket_close($sockets[$k]); unset($sockets[$k], $write[$k], $read[$k]); } } /* foreach ($error as $k=>$sock) { $errors[$k] = socket_strerror($sockets[$k]); socket_close($sockets[$k]); unset($sockets[$k], $write[$k], $read[$k]); } * */}while(true);echo "socket: " . (microtime(true) - $t2) . "\n";echo "\n";?>
root@cs12621:/home/www# php test.php
curl_multi: 6.0599839687347
socket: 4.1367900371552

root@cs12621:/home/www# php test.php
curl_multi: 6.2453439235687
socket: 4.0472211837769

root@cs12621:/home/www# php test.php
curl_multi: 6.112576007843
socket: 4.0291259288788
Главная
WEB
PunBB Mod v0.6.2
0.010 s