2015-05-25 3 views
2

Почему этот fsockopen настолько медленный по сравнению с тем же запросом в браузере?fsockopen кажется очень медленным

PHP fsockopen: 0.254 сек

браузера: 0.070 сек

fsockopen запрос

$time = microtime(true); 

if($fp = fsockopen('ssl://domain.com', 443, $errno, $errstr, 20)){ 
    echo "\n".(microtime(true) - $time); 
    $this->request = 'POST '.$path.' HTTP/1.1'.$crlf 
     .'Host: '.$this->host.$crlf 
     .'Content-Type: application/x-www-form-urlencoded'.$crlf 
     .'Content-Length: '.$content_length.$crlf 
     .'Connection: Close'.$crlf.$crlf 
     .$body; 
    fwrite($fp, $this->request); 

    while($line = fgets($fp)){ 
     if($line !== false){ 
      $this->response .= $line; 
     } 
    } 

    fclose($fp); 
} 

echo "\n".(microtime(true) - $time); 

fsockopen результаты

0.18865990638733 
0.25424790382385 

запрос из браузера

enter image description here

+0

DNS кэширование? обратное время поиска dns? есть больше сетевого вызова, чем просто время пролета на проводе. –

+0

Как использовать кеширование DNS с помощью fsockopen? – clarkk

+0

у вас нет. это делается на уровне системы. –

ответ

0

Это может быть EOF проблема, ваш Еореп ждать до тайм-аута.

Попробуйте более низкий тайм-аут для более быстрого возврата, но это не изящное решение.

Другое решение для запроса соединения вручную с bucle, как в этом примере:

while (!feof($conn)) { 
    print fgets($conn, 1024); 
} 

Источник Например: https://stackoverflow.com/a/1319434/3518053

+0

Это не решило проблему. – clarkk

+0

Я выполняю тесты, но не могу воспроизвести проблема, с некоторыми примерами страницы соединение fopen происходит очень быстро. Может быть, вы могли бы дать мне URL-адрес, который может воспроизвести проблему? – manuelbcd

Смежные вопросы