За последние 24 часа нас посетили 23628 программистов и 1661 робот. Сейчас ищут 903 программиста ...

Параллельная работа функций fsockopen()

Тема в разделе "PHP для новичков", создана пользователем блудный сын, 2 дек 2008.

  1. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Нужно чтобы при вызове скрипта, скрипт получил данные по двум адресам. Я вот тут подумал, если я данные буду получать последовательно применяя эти функции (см.код):
    PHP:
    1.  
    2. <?php
    3. //Первое соединение
    4. $sock1=fsockopen("site1.ru",80,$errno,$errstr);
    5.      if(!$sock1) exit("$errno($errstr)");
    6.      else
    7.      {
    8.      fputs($sock1, $data1."\r\n");
    9.      while(!feof($sock1))
    10.      {
    11.      $line=$line.fgets($sock1);
    12.      }
    13.      }
    14. fclose($sock1);
    15.  
    16. //Второе соединение
    17. $sock2=fsockopen("site2.ru",80,$errno,$errstr);
    18.      if(!$sock2) exit("$errno($errstr)");
    19.      else
    20.      {
    21.      fputs($sock2, $data2."\r\n");
    22.      while(!feof($sock2))
    23.      {
    24.      $line=$line.fgets($sock2);
    25.      }
    26.      }
    27. fclose($sock1);
    28. ?>
    то это ведь замедлит работу скрипта, а вот если скрипт одновременно будет получать данные с двух адресов, то это ускорит его работу. Подскажите, как сделать, чтобы данные поступали параллельно, а не последовательно?
     
  2. Ti

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

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
  3. блудный сын

    блудный сын Активный пользователь

    С нами с:
    18 июн 2008
    Сообщения:
    632
    Симпатии:
    0
    Я с курлом к сожалению не работал. Все на сокетах делаю. Может с ними тоже можно что-то придумать? Посмотрите на этот код:
    PHP:
    1.  
    2. <?php
    3. $end1=$end2=1;
    4. $sock1=fsockopen("site1.ru",80,$errno,$errstr);
    5. $sock2=fsockopen("site2.ru",80,$errno,$errstr);
    6.      fputs($sock1, $data1."\r\n");
    7.      fputs($sock2, $data2."\r\n");
    8.      while(!$end1 and !$end2)
    9.      {
    10.      if (!feof($sock1)) {$line1=$line1.fgets($sock1,64);} else {$end1="";}
    11.      if (!feof($sock2)) {$line2=$line2.fgets($sock2,64);} else {$end2="";}
    12.      }
    13. fclose($sock1);
    14. fclose($sock2);
    15. ?>
    16.  
    не может ли он быть путем к решению параллельности работы функций?
     
  4. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск