2014-02-06 60 views
8

我有一個設置,我有兩臺運行瘦客戶機(Apache,PHP)的服務器。在服務器A上,它考慮客戶端計算機並連接到服務器B以通過Restful API獲取數據。兩臺服務器都在同一個網絡上。服務器B,請求的響應如下所示:PHP Curl API響應時間與不同服務器不同

{ 
    "code": 200, 
    "response_time": { 
     "time": 0.43, 
     "measure": "seconds" 
    } 
} 

服務器B通過使用microseconds到標誌的請求塊的開始和結束計算完成每個任務的時間。但是當我使用curl服務器A撥打電話到服務器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。我認爲API的curl的時間與API報告的時間非常相似。據我所知,API不考慮網絡流量和速度來打開連接 - 但18秒與0.43對我而言似乎很陌生。

這裏的任何想法?

+0

哪些數據是API發回?此數據有多大 –

+0

數據正在以JSON形式發回。它可能相當大 - 不確定大小,但對於一個示例文件,內容長度爲「內容長度:136917」。 – gregavola

+0

服務器將事情發回給服務器的下載速度是多少。過去我已經看到了一些128kps的設置,所以你應該研究一下! –

回答

1

3天前我有同樣的問題。我浪費了整個下午才發現問題。最後,我聯繫了我的服務器提供商,並告訴他這個問題。他說,這不是我的腳本的問題,而是運營商(網絡)的問題。

也許這是我的問題,所以請聯繫您的服務器提供商並詢問他。 你用file_get_contents試過了嗎?如果響應時間與它相同,那將會很有趣。

7

這不是捲毛問題了。而是它的網絡設置的問題。你可以通過做幾件事來檢查這一點。

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

相關問題