За последние 24 часа нас посетили 17853 программиста и 1719 роботов. Сейчас ищут 928 программистов ...

проблема с "многопоточной" загрузкой страниц

Тема в разделе "Прочие вопросы по PHP", создана пользователем capitanclaw, 31 янв 2008.

  1. capitanclaw

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

    С нами с:
    31 янв 2008
    Сообщения:
    2
    Симпатии:
    0
    Добрый день!

    Возникла проблема, которую не могу разрешить: Есть скрипт, который загружает веб страницы с помощью асинхронных сокетов. Но этот скрипт не умеет определять конец у некоторых html страниц, в частности от codeproject, в результате чего получается бесконечный цикл.

    Синтетический тест:

    PHP:
    1. <?
    2.  
    3.  
    4. $site = "http://www.codeproject.com/KB/database/relationaladonet.aspx";
    5. $url = parse_url($site);
    6.  
    7. $socket = stream_socket_client($url["host"].":"."80", $errno, $errstr, 100,
    8.   STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
    9. $contents = array();
    10.  
    11. $write = array($socket);
    12. $read = array();
    13.  
    14. while (TRUE)
    15. {
    16.   $n = stream_select($read, $write, $e = null, 2);
    17.  
    18.   if ($n > 0)
    19.   {
    20.     // чтение
    21.     foreach ($read as $r)
    22.     {
    23.       $text = fread($r, 8096);
    24.      
    25.       echo date("H:i:s")." Chunk len:".strlen($text)."<br />";
    26.       flush();
    27.       // если все данные получены
    28.       if (strlen($text) == 0)
    29.       {
    30.         echo "Complete!<br />";
    31.         echo $content;
    32.         die();
    33.       }
    34.     }
    35.  
    36.     // запись
    37.     foreach ($write as $w)
    38.     {
    39.       fwrite($w, "GET ".$url["path"]." HTTP/1.1\r\nHost: ".$url["host"]."\r\n\r\n");
    40.     }
    41.   }
    42.   else
    43.   {
    44.     // Данных нету - спим спокойно
    45.     Sleep(1);
    46.     echo date("H:i:s")." Zzz...<br />";
    47.   }
    48.   // Пишем один раз
    49.   $write = array();
    50.   $read = array($socket);
    51. }
    52.        
    53. ?>
    Этот скрипт у меня выдает следующее:
    Некоторые странички нормально загружаются, а некоторые вот так...

    В чем может быть проблема?? :?:
     
  2. Ивашка

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

    С нами с:
    29 авг 2007
    Сообщения:
    96
    Симпатии:
    0
    Адрес:
    Щёкино/Тула
    Ответ навскидку, проверять некогда - codeproject шлет Connection: Keep-Alive на 300 сек.
    Возможно, причина в этом. Попробуйте в строке запроса указать Connection: close.
     
  3. capitanclaw

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

    С нами с:
    31 янв 2008
    Сообщения:
    2
    Симпатии:
    0
    Супер! Помогло, спасибо тебе!