2015-11-09 11 views
7

Dưới đây là một tập dữ liệu nhỏ mà từ đó tôi đang cố trả lời hai câu hỏi:Làm cách nào tôi có thể ước tính thời gian kết nối proxy cho yêu cầu cURL bằng cách sử dụng giá trị CURLINFO _ * _ TIME?

  1. Proxy mất bao lâu để kết nối với máy chủ API?
  2. Yêu cầu API mất bao nhiêu thời gian để trả lại?

Các mã cơ bản như sau:

$c    = curl_init();   // assume all options set correctly 
$time   = microtime(true); 
$response  = curl_exec($c); 
$curl_info  = curl_getinfo($c);  // Returns each `*_TIME` field 
$response_time = microtime(true)-$time; // Returns total PHP execution time 

Từ trên, chúng tôi xây dựng này:

id response_time NAMELOOKUP_TIME CONNECT_TIME APPCONNECT_TIME PRETRANSFER_TIME STARTTRANSFER_TIME REDIRECT_TIME TOTAL_TIME 
1 0.250691  0.000191  0.025070  NULL   0.181040   0.250239   0.000000  0.250306 
2 0.958577  0.000129  0.022764  NULL   0.136846   0.664099   0.000000  0.957881 
3 0.578614  0.000053  0.021111  NULL   0.127998   0.44.000000  0.577812 

bao nhiêu thời gian đã được chi tiêu về proxy vs yêu cầu api cho mỗi bên trên ?


Các cURL Documentation là hữu ích nhưng tôi không chắc chắn làm thế nào để trả lời câu hỏi của tôi ở trên với các phần có liên quan từ các tài liệu:

TOTAL_TIME   Total time of previous transfer. 
NAMELOOKUP_TIME  Time from start until name resolving completed. 
CONNECT_TIME   Time from start until remote host or proxy completed. 
APPCONNECT_TIME  Time from start until SSL/SSH handshake completed. 
PRETRANSFER_TIME  Time from start until just before the transfer begins. 
STARTTRANSFER_TIME Time from start until just when the first byte is received. 
REDIRECT_TIME  Time taken for all redirect steps before the final transfer. 

Biểu đồ bao gồm là hữu ích để xem cách những lần chồng lên :

| 
|--NAMELOOKUP 
|--|--CONNECT 
|--|--|--APPCONNECT 
|--|--|--|--PRETRANSFER 
|--|--|--|--|--STARTTRANSFER 
|--|--|--|--|--|--TOTAL 
|--|--|--|--|--|--REDIRECT 

Nhưng tôi vẫn không chắc chắn nên phân bổ thời gian kết nối proxy. Dưới đây là cùng biểu đồ với nhận xét của tôi:

| 
|--NAMELOOKUP     // DNS, clearly not proxy. Also insignificant values. 
|--|--CONNECT     // Does this count toward Proxy Time? 
|--|--|--APPCONNECT   // Not set (likely due to non-https transaction) 
|--|--|--|--PRETRANSFER  // Does this count toward Proxy Time? 
|--|--|--|--|--STARTTRANSFER // Stop proxy time? So Proxy Time = STARTTRANSFER? 
|--|--|--|--|--|--TOTAL  // Would TOTAL-STARTRANSFER = API Request Time? 
|--|--|--|--|--|--REDIRECT // Always 0 (???) 

Đây là cách thức hoạt động của HTTP Proxy. Các mục CURLINFO _ * _ ở trên phù hợp với biểu đồ này ở đâu?

HTTP Proxies

Trả lời

2

Tôi không nghĩ rằng có cách nào để tính toán chính xác những gì bạn đang tìm kiếm.

cURL kết nối với proxy, gửi yêu cầu và đang chờ phản hồi. Tất cả mọi thứ proxy có thời gian khôn ngoan (đó là độ phân giải DNS riêng, kết nối với máy chủ, gửi (proxy) yêu cầu, chờ trả lời, đọc thư trả lời và proxy lại nó là hộp màu đen cho cURL:

không có cách nào biết được bất kỳ bước nào trong số các bước này chỉ được thực hiện riêng lẻ từ proxy HTTP/SOCKS. có thể là có thể có một sự chậm trễ nhỏ từ thời gian proxy hoàn thành yêu cầu khi cURL nhận được byte đầu tiên trở lại (bộ nhớ đệm có lẽ?)

Một khả năng khác tôi không chắc chắn của, (có thể phụ thuộc vào cấu hình proxy và các tiêu đề phản hồi được gửi bởi API), là khi proxy thực sự gửi dữ liệu trở lại. Nó có thể cần tải xuống toàn bộ phản hồi HTTP hoặc có thể bắt đầu gửi tiêu đề và dữ liệu khi đọc chúng. Điều này có thể dẫn đến một số khác biệt đáng kể trong tính toán của bạn. Cuối cùng, tôi nghĩ điểm mấu chốt là bởi vì bạn không có chi tiết kết nối từ proxy, không có cách nào để biết hoặc xấp xỉ chính xác khoảng thời gian kết nối proxy với API và mất bao lâu để nhận được phản hồi .Nếu không, bạn đúng là TOTAL - STARTTRANSFER là xấp xỉ tốt nhất của bạn cho thời gian phản hồi nếu bạn đang sử dụng proxy.

Nếu không biết chính xác bạn đang cố gắng làm gì hoặc tại sao, có lẽ tốt nhất bạn nên thuê một số VPS hoặc điện toán đám mây tại các vị trí địa lý khác nhau để chạy một số phiên bản PHP bằng cách sử dụng cURL để kết nối trực tiếp với API. truy cập vào tất cả các số liệu bạn đang tìm kiếm.

Các vấn đề liên quan