簡體   English   中英

.NET / Windows Server中的最大傳出套接字連接

[英]Max Outgoing Socket Connections in .NET/Windows Server

我有一個稍微不尋常的情況,我需要在我的服務器上為成千上萬的移動用戶維護CLIENT tcp連接到另一台服務器(基本上移動設備能夠連接到我的中間層服務器,這樣可以保持更穩定的連接到移動設備的第三方服務器)。

無論如何,我使用異步套接字(包含在SslStream中)開發了我的服務器應用程序,並且現在有1000個客戶端會話全時運行。 我對結果感到非常滿意,因為我看到單核處理器的平均CPU使用率為0-10%,並且隨着時間的推移大約使用了60mb的ram。

我的問題是,如何擴展它以便我可以在我的服務器上運行100,000或200,000或更多客戶端會話? 同樣,這有點非傳統,因為我的服務器並不像服務器那樣,因為我擔心傳出的連接,而不是傳入。

我知道有一個注冊表設置MaxUserPort需要更改,以超出默認值,似乎是5000.但是,似乎有另一個硬限制65535,我不太清楚該限制所在的位置。 這是每個網絡接口的限制嗎? 它是全局Windows限制嗎? 這是每個流程的限制嗎?

如果是每個網絡接口的限制,我可以添加多個網絡接口並將客戶端會話套接字綁定到每個接口(例如:接口1上的65k,接口2上的65k等)?

我也不太清楚是什么,如果有任何套接字選項或屬性我應該設置來幫助解決問題。 現在我沒有使用任何套接字選項。

我真的很感激有關這個問題的任何想法,因為在這個問題上很難得到明確的建議。 謝謝!

Windows機器可以輕松擴展到非常多的開放連接。 64k臨時端口限制是每個IP地址,而不是每台機器。 如果您需要更多短暫端口,請按@SuperTux建議增加限制,但也要為機器分配更多IP。 為了利用,您必須在客戶端套接字上手動調用Bind()並從池中傳遞帶有空閑端口的源IP(這也意味着您將負責跟蹤每個地址的可用臨時端口計數)。 許多高端設備類型設備執行此操作(例如,負載平衡器上的SNAT池)以支持數十萬個並發連接。

簿記是一件麻煩事,但比為每個64k客戶端連接投入未充分利用的硬件更好。

65355是IP協議的限制,更重要的是大多數操作系統的TCP / IP堆棧的限制。

若要增加Windows上的臨時端口的最大數量,請按照下列步驟操作:

  1. 啟動注冊表編輯器
  2. 在注冊表中找到以下子項,然后單擊“參數”:HKEY_LOCAL_MACHINE \\ SYSTEM \\ CurrentControlSet \\ Services \\ Tcpip \\ Parameters
  3. 在“編輯”菜單上,單擊“新建”,然后添加以下注冊表項:

    值名稱: MaxUserPort

    值類型: DWORD

    值數據: 65534

    有效范圍: 5000-65534(十進制)

    默認值: 0x1388(小數點后5000)

    說明:此參數控制程序從系統請求任何可用用戶端口時使用的最大端口號。 通常,臨時(短期)端口在1024和5000之間分配。

通常,要擴展到超過65K端口,您將在群集中使用多個服務器。

暫無
暫無

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

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