PHP Curl API响应时间因服务器而异
我有一个设置,其中有两台服务器运行瘦客户机(Apache、PHP)。在服务器A上,它考虑了一个客户端机器,并通过REST API连接到服务器B以获取数据。两台服务器位于同一网络上。在服务器B上,请求的响应如下所示:PHP Curl API响应时间因服务器而异,php,api,rest,curl,Php,Api,Rest,Curl,我有一个设置,其中有两台服务器运行瘦客户机(Apache、PHP)。在服务器A上,它考虑了一个客户端机器,并通过REST API连接到服务器B以获取数据。两台服务器位于同一网络上。在服务器B上,请求的响应如下所示: { "code": 200, "response_time": { "time": 0.43, "measure": "seconds" } } 服务器B使用微秒来标记请求块的开始和结束,从而计算每个任务的完成时间。但是,当我在服务器A上使
{
"code": 200,
"response_time": {
"time": 0.43,
"measure": "seconds"
}
}
服务器B使用微秒来标记请求块的开始和结束,从而计算每个任务的完成时间。但是,当我在服务器A上使用curl
调用服务器B时,我在执行时间方面得到了非常奇怪的结果:
$url = "https://example.com/api";
/*server B address. I've tried IP address as well without any change in results.
This must go over a SSL connection. */
$start_time = microtime(true);
$curl2 = curl_init();
curl_setopt($curl2, CURLOPT_URL, $url);
curl_setopt($curl2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl2, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl2, CURLOPT_USERAGENT, "Server A User Agent");
$result = curl_exec($curl2);
$HttpCode = curl_getinfo($curl2, CURLINFO_HTTP_CODE);
$total_time = curl_getinfo($curl2, CURLINFO_TOTAL_TIME);
$connect_time = curl_getinfo($curl2, CURLINFO_CONNECT_TIME);
$namelookup_time = curl_getinfo($curl2, CURLINFO_NAMELOOKUP_TIME);
$end_time = microtime(true);
$timeDiff = round(((float)$end_time - (float)$start_time), 3);
每次检查我都会得到以下信息:
$timeDiff = 18.7381 (Using Microseconds)
$total_time = 18.7381 (Transfer Time)
$connect_time = 0.020679
$namelookup_time = 0.004144
所以我不知道为什么会这样。是否有更好的方法从网络中保存API的另一台服务器获取数据?这就像Twitter的站点从另一台不是API服务器的服务器上使用API一样。我认为curl
到API的时间与API报告的时间非常相似。我知道API没有考虑网络流量和打开连接的速度,但是18秒对0.43秒对我来说似乎很奇怪
有什么想法吗?大约三天前我也遇到了同样的问题。我浪费了整整一个下午才找到问题。最后,我联系了我的服务器提供商,并告诉他这个问题。他说,这不是我剧本的问题,而是运营商(网络)的问题
也许这与我遇到的问题相同,所以请联系您的服务器提供商并询问他。
你试过文件内容吗?如果响应时间与它相同,那将很有趣。这不再是curl的问题。而是网络设置的问题。你可以通过做一些事情来检验这一点
1) 使用ping
命令检查响应时间
From Server-A: ping Server-B-IP
From Server-B: ping Server-A-IP
2) 同样,您也可以使用traceroute
(对于windowstracert
)命令来检查响应时间。你应该马上得到答复
From Server-A: traceroute Server-B-IP
From Server-B: traceroute Server-A-IP
3) 使用wget
或curl
命令行从一台服务器下载一个大文件(比如100 MB)到另一台服务器,然后检查它们需要多长时间。例如,使用wget
:
From Server-B: wget http://server-A-IP/test/test-file.flv
From Server-A: wget http://server-B-IP/test/test-file.flv
4) 除了这些基本的例行检查外,您还可以使用一些高级工具来解决此网络问题。例如,以下两个链接中的命令/示例:
API发回的数据是什么?&此数据有多大?数据将作为JSON发送回。它可能相当大-不确定大小,但一个示例文件的内容长度是“Content Length:136917”。当服务器将内容发送回它时,它的下载速度是多少。我在过去见过一些设置为128kps的,所以你应该看看!