我有一个设置,其中有两台运行瘦客户端(Apache、PHP)的服务器。在服务器 A 上,它被视为客户端计算机并连接到服务器 B 以通过 Restful API 获取数据。两台服务器都在同一网络上。在 Server B 上,请求的响应如下所示:
{
"code": 200,
"response_time": {
"time": 0.43,
"measure": "seconds"
}
}
服务器 B 通过使用 微秒
标记请求 block 的开始和结束来计算每个任务的完成时间。但是当我在服务器 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
(对于windows tracert
)命令来检查响应时间。您应该会立即收到回复。
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) 除了这些基本的例行检查外,您还可以使用一些高级工具来解决此网络问题。例如来自以下两个链接的命令/示例:
Test network connection performance between two Linux servers
Command line tool to test bandwidth between 2 servers
关于PHP Curl API 响应时间因服务器而异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605034/