2016-09-15 67 views

回答

14

是的,有一個限制。默認連接限制是每個遠程主機2個併發連接。這可以被覆蓋。例如,我相信ASP.NET在默認情況下將覆蓋默認值爲每個遠程主機10個連接。

https://msdn.microsoft.com/en-us/library/7af54za5.aspx

客戶端和服務器之間的連接數可以對應用程序吞吐量 巨大的影響。默認情況下,使用HttpWebRequest類的應用程序 最多使用兩個持續連接到給定服務器的 連接,但您可以基於每個應用程序設置最大連接數 。

要自己更改連接限制,請使用ServicePointManager.DefaultConnectionLimit。在開始進行與遠程主機的HTTP連接之前,請確保在進程啓動後儘快進行此更改。這是因爲,一旦實際建立到遠程主機的HTTP連接,將使用當前的默認連接限制爲該遠程主機創建一個ServicePoint

請注意,除了HTTP客戶端類實施的併發連接外,還有其他有效的限制。例如,如果你想打開一百萬個併發連接,你可能會用盡內存,線程或其他操作系統資源。如果你遇到了這些限制,那麼你需要提出另一個更普遍的問題,關於如何擴展.net進程來處理大量併發I/O。但是,如果你只打開幾十個連接,那麼你應該沒問題。

順便說一句,如果你很好奇爲什麼默認限制如此之低,它實際上已經被納入HTTP規範 - 目標是確保自私的HTTP客戶端不會同時連接HTTP服務器。雖然現代瀏覽器忽略規範。請參閱http://www.stevesouders.com/blog/2008/03/20/roundup-on-parallel-connections/瞭解更多關於此主題的細節,而不是您想知道的!

+1

我們如何在.net內核中配置它? 'ServicePointManager'不再是一件事情 –

+0

.NET Core 2.0現在具有ServicePointManager,您也可以直接將它設置爲HttpClient。看到我的答案在這裏:https://stackoverflow.com/questions/1361771/max-number-of-concurrent-httpwebrequests/46905342#46905342 – cbp