За последние 24 часа нас посетили 31950 программистов и 1380 роботов. Сейчас ищут 813 программистов ...

Практически что работает быстрее socket или curl

Тема в разделе "Прочие вопросы по PHP", создана пользователем Locker, 19 фев 2007.

  1. Locker

    Locker Активный пользователь

    С нами с:
    12 авг 2006
    Сообщения:
    124
    Симпатии:
    0
    Хотел бы узнать, для псевдомультипоточности что быстрее работает для получения файлов, multiHttp (такая функция на php.net на сокетах) или curl в цикле for? Только не говорите засечь - это не идеальный способ для такого вида экспериментов
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Имхо, в контексте получения данных по сети разница между curl и socket незначительная.
    А вот с multiHttp не знаком, может там, конечно, и добились того, чтобы она тормозила с достаточным качеством.
     
  3. Locker

    Locker Активный пользователь

    С нами с:
    12 авг 2006
    Сообщения:
    124
    Симпатии:
    0
    PHP:
    1.  
    2. function multiHTTP ($urlArr, $max_threads, $sleep_time) {
    3. $sockets = Array(); // socket array!
    4. $urlInfo = Array(); // info arr
    5. $retDone = Array();
    6. $retData = Array();
    7. $errno  = Array();
    8. $errstr  = Array();
    9.  
    10. if (count($urlArr)<$max_threads) $max_threads=count($urlArr);
    11. #echo"макс потоков: $max_threads<br>\n";
    12.     #for ($x=0;$x<count($urlArr);$x++) {
    13.     $i=1;
    14.     foreach ($urlArr as $key => $url){
    15.  
    16.       $done_socket=false;
    17.  
    18.        if (($max_threads > count($sockets))&&(!$done_socket)){
    19.         #echo"добавляю в поток урл с кеем $key<br>\n";
    20.  
    21.         $urlInfo[$key] = parse_url($urlArr[$key]);
    22.  
    23.  
    24.         $urlInfo[$key]['port'] = ($urlInfo[$key]['port']) ? $urlInfo[$key]['port'] : 80;
    25.         $urlInfo[$key]['path'] = ($urlInfo[$key]['path']) ? $urlInfo[$key]['path'] : "/";
    26.         $sockets[$key] = fsockopen($urlInfo[$key]['host'], $urlInfo[$key]['port'],
    27.                                   $errno[$key], $errstr[$key], 30);
    28.         socket_set_blocking($sockets[$key],FALSE);
    29.         $query = ($urlInfo[$key]['query']) ? "?" . $urlInfo[$key]['query'] : "";
    30.         fputs($sockets[$key],"GET " . $urlInfo[$key]['path'] . "$query HTTP/1.0\r\nHost: " .
    31.         $urlInfo[$key]['host'] . "\r\n".
    32.         "Referer: [url=http://www.google.com]http://www.google.com[/url]\r\n".
    33.         "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n\r\n"
    34.  
    35.         );
    36.         #echo"$i;<br>";
    37.  
    38.        if (count($urlArr)==$i) $done_socket=true;
    39.       }
    40.  
    41.  
    42.       if (($max_threads == count($sockets)) or ($done_socket)){
    43.        $done=false;
    44.          $x=1;
    45.  
    46.         foreach ($sockets as $key => $url){
    47.           #echo"читаю сокет с кеем $key<br>";
    48.            $done=false;
    49.            while (!$done){
    50.  
    51.  
    52.               if (!@feof($sockets[$key])) {
    53.  
    54.                   if ($retData[$key]) {
    55.                     $retData[$key] .= @fgets($sockets[$key],1000);
    56.                   }
    57.  
    58.                    else {
    59.                     $retData[$key] = @fgets($sockets[$key],1000);
    60.                   }
    61.               }
    62.  
    63.  
    64.                else {
    65.               $x++;
    66.               #echo"прочитан сокет с кеем $key $x<br>\n";
    67.               $done=true;
    68.               }
    69.  
    70.            /*if (count($sockets) == $x) {$done=true; echo"<h1>есть</h1>";}*/
    71.            }
    72.  
    73.         }
    74.        unset($sockets);
    75.  
    76.       }
    77.  
    78.      sleep($sleep_time);
    79.      $i++;
    80.     }
    81.     // ok read the data from each one
    82.     #$done = false;
    83.  
    84.  
    85.  
    86.     #sleep(0.1);
    87.  
    88.  
    89.  
    90.  
    91.     return $retData;
    92.     }
    93.  
     
  4. MaXyC_Web_Studio

    MaXyC_Web_Studio Активный пользователь

    С нами с:
    31 дек 2006
    Сообщения:
    678
    Симпатии:
    3
    Адрес:
    Новоуральск
    ух... пригадицца сенкс