имеется вот такой код: PHP: <?php function artistGetInfo($name) { echo "getting xml\n"; $time_start=microtime(true); $socket=fsockopen('tcp://musicbrainz.org',80); $query="GET /ws/1/artist/?type=xml&name=".str_replace('&','',str_replace(' ','+',$name))."&limit=1 HTTP/1.1\r\n"; $query .= "Host: musicbrainz.org\r\n"; $query .= "Connection: keep-alive\r\n\r\n"; if ($socket===false) return false; $result=fwrite($socket,$query); if ($result===false) { fclose($socket); return false; } $res=""; while (!feof($socket)) { $res.=fgets($socket); } fclose($socket); $time_end=microtime(true); $time=$time_end-$time_start; echo $time."\n"; if ($res=="") return false; $res=parse_response(str_replace('life-span','lifespan',$res)); echo "parsing xml\n"; $time_start=microtime(true); $xml=new SimpleXMLElement($res); $time_end=microtime(true); $time=$time_end-$time_start; echo $time."\n"; $a='artist-list'; if ($xml->$a!=null) { return $xml->$a->artist; } else { return false; } } ?> почему то каждое получение xml занимает примерно 75 секунд, тогда как если открывать в браузере оно работает почти моментально. Загрузка компа, на котором крутится пхп минимальна, инет канал тоже свободен. Для примера можете сами проверить http://musicbrainz.org/ws/1/artist/?typ ... es&limit=1 Кто-нибудь может подсказать с чем могут быть связаны такие задержки при получении данных?
пробовал из командной и через cgi причем такое происходит походу именно с этим сайтом. мне просто интересно, это может быть проблема в чем-то у меня, или причина от меня не зависит?
мне так мыслится, быть связано это может с тем, что. когда запускаешь скприпт на выполнение из командной строки, интерпретатор начинает открывать кучу файлов, собирать свою конфигурацию итп. если из браузера, то вебсервер вычитывает конфигурацию пхп и загружает все его либы в себя лишь один раз - при запуске демона (сервиса). отсюда и разница. выводы сделаны, исходя из наблюдений с пом. filemon.exe
не, это тут не причём, ибо таймер то показывает время для каждого действия отдельно(получение xml и создание SimpleXMLElement), и время работы скрипта через cgi и из консоли примерно одинаковое
никто на меня не обидится, если я скажу, что это бред? marwin22 с какой целью keep-alive шлёшь, мил человек?
А действительно, дело в keep-alive. Спасибо! Но по поводу keep-alive есть тоже вопрос. Просто изначально я хотел делать несколько запросов, используя один и тот же сокет, поэтому слал keep-alive. Но в результате пришел к тому, что успешно пишу в сокет следующий запрос(до этого один запрос был уже послан и успешно обработан), но ответа на него вычитать не могу. Сервер на мои запросы отвечает "Connection:keep-alive" и также указывает таймаут keep-alive. В чем может быть загвоздка?