Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP Curl API响应时间因服务器而异_Php_Api_Rest_Curl - Fatal编程技术网

PHP Curl API响应时间因服务器而异

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上使

我有一个设置,其中有两台服务器运行瘦客户机(Apache、PHP)。在服务器A上,它考虑了一个客户端机器,并通过REST API连接到服务器B以获取数据。两台服务器位于同一网络上。在服务器B上,请求的响应如下所示:

{
   "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
(对于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) 除了这些基本的例行检查外,您还可以使用一些高级工具来解决此网络问题。例如,以下两个链接中的命令/示例:



API发回的数据是什么?&此数据有多大?数据将作为JSON发送回。它可能相当大-不确定大小,但一个示例文件的内容长度是“Content Length:136917”。当服务器将内容发送回它时,它的下载速度是多少。我在过去见过一些设置为128kps的,所以你应该看看!