1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Реализации ping-а

Тема в разделе "Web Coding", создана пользователем Leonid777, 11 янв 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Leonid777

    Leonid777 Постоялец

    Регистр.:
    16 мар 2007
    Сообщения:
    97
    Симпатии:
    5
    Профи, подскажите плиз. :bc:

    Вот две функции, которые впринципе должны делать одно и тоже, только разными методами:
    Функция 1:
    PHP:
    <?

    ping ("http://ping.blogs.yandex.ru/RPC2""Pupkin","http://pupkin.net/");
    // ping ("http://ping.feedburner.com/RPC2", "Pupkin","http://pupkin.net/");

    function ping ($url$blogname$blogurl)
    {

    $tb_send='<?xml version="1.0"?>
    <methodCall>
        <methodName>weblogUpdates.ping</methodName>
        <params>
            <param>
                <value>'
    .$blogname.'</value>
            </param>
            <param>
                <value>'
    .$blogurl.'</value>
            </param>
        </params>
    </methodCall>'
    ;

            
    $target=parse_url($url);

            
    $tb_sock fsockopen($target["host"],  80); 
            
    fputs($tb_sock"POST " $target["path"] . $target["query"] . " HTTP/1.1\r\n");
            
    fputs($tb_sock"User-Agent: Pupkin.net\r\n");
            
    fputs($tb_sock"Host: " $target["host"] . "\r\n");
            
    fputs($tb_sock"Content-Type: text/xml\r\n");
            
    fputs($tb_sock"Content-length: " strlen($tb_send) . "\r\n");
            
    fputs($tb_sock"Connection: close\r\n\r\n");
            
    fputs($tb_sock$tb_send); 
            
    // Gather result
            
    while (!feof($tb_sock)) {
                
    $response .= fgets($tb_sock128);
            } 
            
    // Close socket
            
    fclose($tb_sock); 
            
    // Did the trackback ping work
            
    strpos($response'<error>0</error>') ? $return true $return false
            
    // send result
            
    return $return;
       } 

    ?>
    И функция 2:

    PHP:

    <?php 

    $blogname 
    "Блог Пупкина";
    $blogurl "xttp://pupkin.net/";

    # Using the XML-RPC extension to format the XML package
    $request xmlrpc_encode_request("weblogUpdates.ping", array($blogname$blogurl) );

    # Using the cURL extension to send it off,
    # first creating a custom header block
    $header[] = "Host: rpc.technorati.com";
    $header[] = "Content-type: text/xml";
    $header[] = "Content-length: ".strlen($request) . "\r\n";
    $header[] = $request;

    $ch curl_init();
    curl_setopt$chCURLOPT_URL"http://rpc.technorati.com/rpc/ping"); # URL to post to
    curl_setopt$chCURLOPT_RETURNTRANSFER); # return into a variable
    curl_setopt$chCURLOPT_HTTPHEADER$header ); # custom headers, see above
    curl_setopt$chCURLOPT_CUSTOMREQUEST'POST' ); # This POST is special, and uses its specified Content-type
    $result curl_exec$ch ); # run!
    curl_close($ch);

    echo 
    $result;
    ?>
    Меня интересует, какая из них будет быстрее работать и жрать меньше системных ресурсов. + Какая из них, на Ваш взгляд наиболее эффективна?
     
  2. terkin

    terkin

    Регистр.:
    9 дек 2006
    Сообщения:
    513
    Симпатии:
    162
    Думаю что 2я так как реализована с использованием CURL
     
    Leonid777 нравится это.
  3. Sergeknsk

    Sergeknsk Постоялец

    Регистр.:
    17 окт 2007
    Сообщения:
    50
    Симпатии:
    9
    Раз уж скрипты выполняют одно и то же (для одного и того же запроса), то я, на месте ТС, сделал бы банальную проверку скриптов в работе с измерением microtime(), поочередно, для случаев так... не менее ста :) и по среднему значению для каждого сделал бы некоторые выводы.

    Ну а из предположений... Мне тоже кажется курл может быть поудачнее.
     
    Leonid777 нравится это.
  4. mentanos

    mentanos Постоялец

    Регистр.:
    27 дек 2007
    Сообщения:
    128
    Симпатии:
    35
    не знаю насчет курла, но хостеры любят отключать fsockopen. поэтому первый вариант заведомо непереносим и второй стоит выбрать уже по этой причине.

    если вопрос переносимости не ставится, уверен, что принципиальной разницы во времени выполнения/ресурсах приведенных вариантов нет.
     
    Leonid777 нравится это.
  5. Zak

    Zak Постоялец

    Регистр.:
    13 апр 2006
    Сообщения:
    94
    Симпатии:
    6
    сокеты могут быть быстрее, если "спамить в несколько потоков".
    а так оба решения одинаково медленные -
    ведь основное время - это отсылка/ожидание ответа сети
     
    Leonid777 нравится это.
  6. Leonid777

    Leonid777 Постоялец

    Регистр.:
    16 мар 2007
    Сообщения:
    97
    Симпатии:
    5
    Ок. А можешь подсказать какую-либо альтернативу?
     
  7. Sergeknsk

    Sergeknsk Постоялец

    Регистр.:
    17 окт 2007
    Сообщения:
    50
    Симпатии:
    9
    Если нужно на php послать запрос и получить ответ, то иного пути нет.
    Если нужно выполнять периодически и для одного хоста - то особых проблем не должно быть...
    Но, похоже, раз вопрос стоит о производительности, то дело, значит, будет "на поток"... В общем, если скрипт будет запускаться много раз и одновременно (т.е. параллельная работа) то для уменьшения ресурсоёмкости лучше будет переписать с CURL_MULTI...
    А вообще, лучше смотреть в сторону С++ с pthreads :)
     
    Leonid777 нравится это.
  8. zavulon

    zavulon Постоялец

    Регистр.:
    9 май 2007
    Сообщения:
    79
    Симпатии:
    34
    Загрузка в несколько потоков с multi_curl и PHP
    Перейти по ссылке
     
    Leonid777 нравится это.
  9. Sergeknsk

    Sergeknsk Постоялец

    Регистр.:
    17 окт 2007
    Сообщения:
    50
    Симпатии:
    9
    Имхо. Для пхп 5.0.x, где мультикурл был только отрелизен глюков было полно. К версии 5.2.х уже всё намного лучше :)
    Кстати, в курл прилично было добавлено, говоря словами разработчиков "Available since PHP 5.1.0", так что раньше этой версии лучше не юзать. Перейти по ссылке
     
  10. Leonid777

    Leonid777 Постоялец

    Регистр.:
    16 мар 2007
    Сообщения:
    97
    Симпатии:
    5
    Ок. Дайвайте внсем некоторую ясность в то, для чего будет использован один из вышеуказанных кодов(т.е. наиболее эффективный).

    Вот список нескольких url-ов для пинга(т.е. сообщения об обновлениии блога:(
    Перейти по ссылке
    Перейти по ссылке
    Перейти по ссылке
    Перейти по ссылке
    Перейти по ссылке

    Ну и запустив один из вышеуказанных кодов в цикле, я хочу чтобы он последовательно (или паралельно - правда я понятия не имею как реализуется паралельные соединения)
    передал по вышеуказанным url-ам информацию об обновлении блога.

    Дак вот вопрос стоит в следующем - как этот процесс реализовать наиболее эффективным образом - т.е. чтобы он не жрал много ресурсов у хостера и справился с работой максимально быстро?
     
Статус темы:
Закрыта.