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

标签 php api rest curl

我有一个设置,其中有两台运行瘦客户端(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) 使用wgetcurl 命令行从一台服务器下载一个大文件(比方说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/

相关文章:

php - 我可以向 Android Studio 中的现有项目添加新包吗?

php - JSON 对象到 PHP 关联数组

iphone - Objective-C 中小部件 API 的最佳实践

web-services - 类级别和方法级别的@Path配置

java - Jersey 方法不允许 405

php - 如何在后台url中添加php标签?

php - Mysql查询未按顺序分组

javascript - 最新版本的 Firefox 没有 svgElm.offsetHeight 属性

c# - 没有实现接口(interface)成员错误

angular - 在 Angular 4/Express 中访问响应状态代码