我在localhost上通过URL获取服务响应。使用CURL并使用" localhost"作为域名,第一个请求大约需要150ms,第二个请求需要2ms。使用IP而不是" localhost"两个CURL请求都需要2ms。使用file_get_contents
时,无论是否为#local;" localhost"或IP。
甚至对于本地主机,会导致这种延迟的原因是什么?
这是测试代码:
$instance['port'] = 8192;
$instance['hostname' ] = 'localhost';
//$instance['hostname' ] = '127.0.0.1';
/* file_get_contents */
$time = microtime(true);
$response = file_get_contents('http://'.$instance['hostname' ].':'.$instance['port'].'/file1.txt');
$queryTime = microtime(true) - $time;
echo "file_get_contents time: ".$queryTime."<br>";
$time = microtime(true);
$response = file_get_contents('http://'.$instance['hostname' ].':'.$instance['port'].'/file2.txt');
$queryTime = microtime(true) - $time;
echo "file_get_contents time: ".$queryTime."<br><br>";
/* CURL */
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://'.$instance['hostname' ].':'.$instance['port'].'/file1.txt');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$time = microtime(true);
curl_exec($ch);
$queryTime = microtime(true) - $time;
echo "CURL time: ".$queryTime."<br>";
curl_setopt($ch, CURLOPT_URL, 'http://'.$instance['hostname' ].':'.$instance['port'].'/file2.txt');
$time = microtime(true);
curl_exec($ch);
$queryTime = microtime(true) - $time;
echo "CURL time: ".$queryTime."<br><br>";
curl_close($ch);
响应:
file_get_contents time: 0.0029559135437012
file_get_contents time: 0.0030159950256348
CURL time: 0.15396809577942
CURL time: 0.002269983291626
使用IP而不是localhost时,响应如下:
file_get_contents time: 0.0025560855865479
file_get_contents time: 0.0034060478210449
CURL time: 0.0026850700378418
CURL time: 0.0027031898498535
答案 0 :(得分:0)
如上所述here,这可能是DNS查找问题。您是否尝试将localhost添加到etc / hosts文件中?
This answer还建议编辑hhtpd.conf可能对您有帮助。
答案 1 :(得分:0)
我尝试了你的脚本,它运行正常。第一次卷曲调用慢一点。我猜测但是检查你是否有IPv6活动,哪个localhost转换成。
尝试停用。