我有一个设置,我有两个服务器运行瘦客户端(Apache,PHP).在服务器A上,它考虑客户端计算机并连接到服务器B以通过Restful API获取数据.两台服务器都在同一网络上.在服务器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的Site从另一台不是API服务器的服务器上消耗他们的API就好了.我认为,卷曲到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