Curl VS fsockopen
1.
orel (03.12.2011 / 15:17)
Вот задумался что из этих двух инструментов лучше использовать.Google дал ответ что curl, но оно и понятно он проще в использовании, а fsockopen более функциональный сетевой инструмент но большую часть кода приходится писать самому.Провёл небольшой тест.
<?
$gtime = array();
#Fsockopen
$gtime['sock'] = microtime(1);
for ($i=0; $i<20; $i++){
$fp = fsockopen('war/', 80);
if ($fp){
fputs($fp, 'GET / HTTP/1.0'. PHP_EOL .'User-Agent: Nokia N82'. PHP_EOL . PHP_EOL);
while(!feof($fp)){
echo fgets($fp);
}
}
fclose($fp);
}
$gtime['sock'] = round(microtime(1) - $gtime['sock'], 4);
# CURL
$gtime['curl'] = microtime(1);
for ($i=0; $i<20; $i++){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://war/');
curl_setopt($ch, CURLOPT_USERAGENT, 'Nokia N82');
$result = curl_exec($ch);
curl_close($ch);
}
$gtime['curl'] = round(microtime(1) - $gtime['curl'], 4);
echo 'CURL: '. $gtime['curl'] .' | Sock '. $gtime['sock'];
?>
Провёл 20 соединений с curl и fsockopen
Результат
CURL: 2.5768 | Sock 0.2176
Получается что fsockopen быстрее, кто считает иначе?
2.
ramzes (03.12.2011 / 15:37)
Я как раз всегда думал что fsockopen быстрее
правда не проверял ни когда
3.
ктулху (03.12.2011 / 15:49)
Лично я за fsockopen, как раз потому что всё надо делать руками, функционально и работает не только с http
4.
orel (04.12.2011 / 00:39)
А можно ли использовать 1 дискриптор соединения посылая в него несколько запросов заголовка?
5.
Maksim (04.12.2011 / 01:14)
хм хм хм...
$ch = curl_init(); зачем в цыкле то 20 раз пускать?
Это какбы не корректное сравнение...
Вынеси из цикла и посмотри на время выполнения... Думаю будет быстрее...
6.
orel (04.12.2011 / 10:22)
5.
Maksim, Сделал, результат CURL: 2.1548 | Sock 0.2097
7.
Андрей (04.12.2011 / 10:26)
там всё надо вынести из цикла, кроме запроса страницы
8.
ктулху (04.12.2011 / 10:27)
Тогда и fsockopen из цикла вынеси
9.
Андрей (04.12.2011 / 10:28)
в цикле нужно оставить только curl_exec($ch); , если страница не меняется.
Добавлено через 07:49 сек.
Я использую curl- удобно. Я даже ботов писал, очень радует работа с куками и отправка post данных и работает тоже не только c http.
10.
Андрей (04.12.2011 / 10:38)
У меня даже костыль есть:
<?php
class page_surfer{
var $post=''; //Пост данные (Если нужно)
var $headers=0; //Получать ли заголовки (0,1)
var $browser='Mozilla/5.0 (Ubuntu; X11; Linux i686; rv:8.0) Gecko/20100101 Firefox/8.0'; //Браузер
var $cookies_file='';//Файл кук
function getpage($var1){ //Получает страницу по адресу $var1
$ch=curl_init("$var1");
if($this->post!=''){
curl_setopt($ch,CURLOPT_POST,1);
}
curl_setopt($ch,CURLOPT_USERAGENT,$this->browser);
$headers=array('Accept: text/html','Accept-Language: ru,en-us','Accept-Charset: utf-8;');
curl_setopt($ch,CURLOPT_HTTPHEADER,$headers);
if($this->post!=''){
curl_setopt($ch,CURLOPT_POSTFIELDS,$this->post);
}
curl_setopt($ch,CURLOPT_HEADER,$this->headers);
if($this->cookies_file!=''){
curl_setopt($ch,CURLOPT_COOKIEJAR,$this->cookies_file);
curl_setopt($ch,CURLOPT_COOKIEFILE,$this->cookies_file);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r=curl_exec($ch);
curl_close($ch);
return $r;
}
}
?>
11.
orel (04.12.2011 / 10:40)
CURL: 1.8746 | Sock 0.2183
Добавлено через 03:47 сек.
10.
Барыга Обама, у меня лучше костыль)) Жалко сюда не поместился, пробовал.
12.
Maksim (04.12.2011 / 13:50)
В принципе возможно)))
Я на курле тоже ботов писал для одной игры...
Когда хорошо начал разбиратся в курле оптимизировал его и скорость выросла в разы... Судить конечно не могу так как юзал курл токо)
Добавлено через 01:49 сек.
А еще от версии курл многое завит. Обрати внимание... Когда ботов поставил на хост много чего не работало да и курл подвисал. написал в поддержку сказали все исправили, заметил что версия изменилась и все заработало без висов быстро. А тогда особенно прокси тормозило жестоко, вообще не работало...
13.
orel (05.12.2011 / 11:17)
Провёл ещё кучу тестов, как оказалось сокеты уступают в производительности curl,а именно многопоточность, обработка запросов.Даже оптимизированный код на fsockopen, выполняет дольше чем curl. Curl как верблюд который способен выдерживать большие нагрузки, но при этом потребляя больше ресурсов.
14.
ктулху (05.12.2011 / 12:45)
тесты в студию, не верю. fsockopen более низкоуровневая штука чем curl.
15.
orel (05.12.2011 / 13:44)
Я так тоже думал, но код работал туго!Примеров уже нету.
16.
Павел (05.12.2011 / 18:50)
Стыдно, но не разу не работал с fsockopen...Только cURL. От спамеров до ботов в vk, все на нём. Очень удобен.
URL:
https://visavi.net/topics/27080