簡體   English   中英

卷毛未正確超時

[英]Curl not timing out properly

我設置了CURLOPT_CONNECTTIMEOUT_MS = 200和CURLOPT_TIMEOUT_MS = 70 ms。 但是我看到的CURLINFO_TOTAL_TIME大約是220毫秒。

根據libcurl文檔,CURLOPT_TIMEOUT_MS還包括連接超時。 因此,基本上我的curl調用總時間不應超過70毫秒。 但是,為什么要花更多的錢回去控制呢?

有人可以解釋這種現象。

我正在使用curl 7.19_02 C ++庫。

這是我的代碼

CURL * curl;
curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url);
curl_easy_setopt(curl,CURLOPT_CONNECTTIMEOUT_MS,200);
curl_easy_setopt(curl,CURLOPT_TIMEOUT_MS,70);
curl_easy_setopt(curl, CURLOPT_HEADER, 0);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); 

double tt = 0.0;
double ns = 0.0;
double ct = 0.0;
double pt = 0.0;
double st = 0.0;

curl_easy_perform(curl);

int curlRC = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &tt);
curlRC = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &ns);
curlRC = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &ct);
curlRC = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pt);
curlRC = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &st);

cout << "Curl timing info: Total: " << tt << endl << " Lookup: "<< ns << endl << "    Connect: " << ct << "\n" << "pre transfer: " << pt << endl << "start transfer: " << st <<endl;

我得到的計時信息如下。 請檢查一下

卷曲時間信息:總計:0.216793

查找:0.000999

連接:0.023199

轉移前:0.023213

開始轉移:0.216667

關鍵是,預轉移和開始轉移之間發生了什么?

這是libcurl 7.20.0版之前的錯誤。 使用7.20.1時,輸出如預期的那樣:

Curl timing info: Total: 0.071098
Lookup: 0.000116
Connect: 0.000303
pre transfer: 0.000327
start transfer: 0

我找不到修正錯誤的變更集。 但可能是cURL更改中的“亞秒級超時改進”

關鍵是,預轉移和開始轉移之間發生了什么?

那是服務器計算您的結果(處理您的請求)並准備好發送響應的第一個字節所花費的實際時間。 簡而言之,這是請求的實際服務器時間,您希望這是最大的時間

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM