簡體   English   中英

使用 HttpClient 發送大量請求的最快和最安全的方法是什么?

[英]What is the fastest and safest way to send large number of requests with HttpClient?

最初,我使用以下方法發送大量 URL:

for (...) {
  using (var client = new HttpClient()) {
    client.GetAsync(url);
  } 
}

事實證明,這是使用 HttpClient 的 錯誤方法,因為 .Dispose 將連接留在另一端,從而浪費服務器資源。 建議的解決方法是使用 httpClient 的共享副本:

var client = new HttpClient();
for (...) {
  client.GetAsync(url);
}

這種方法有一個更嚴重的問題。 如果您的目標 url 位於負載均衡器之后,則 httpClient 會與其路由到的第一個框建立連接,隨后的每次點擊都將轉到該框,而忽略網絡場的其余部分。

那么,以不浪費連接另一端的資源並且能夠利用整個 Web 場的方式使用 HttpClient 的正確方法是什么?

如果你想使用多個 HTTP 連接,一個簡單的解決方案是這樣的:

const int size = 12;
var clients = new HttpClient[size];
for (var i = 0; i < size; i++)
{
    clients[i] = new HttpClient();
}

int j = 0;
for (...)
{
    clients[j++%size].GetAsync(url); // todo: handle async correctly
}

如果您在 ASP.NET Core 應用程序中,我建議您考慮使用IHttpClientFactory

如果您沒有使用 IHttpClientFactory,請注意,如果在您的應用程序的生命周期內發生 DNS 更改,則不會反映出來。

暫無
暫無

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

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