天天看點

探讨.net Socket支援線上連接配接數量

發現不少同學在用.net做通訊的時候都關心一個問題,.net能支援多少個線上連接配接。其實.net的通訊由winsocket所支援,既然由低層的winsocket所支援那.net其端的接入連接配接數的受限完全取于winsocket目前作業系統的限制。
有很多同學認為由于端口有限,是以接入的連接配接會受端口資源限制。其實對于服務端的連接配接接入是不會産生端口資源的配置設定,它隻配置設定相應的作業系統句柄。是以可接入的連接配接不會不會受端口數的限制。其實win預留可接入的連接配接數上限值還是非常大的,通過以下系統資料庫值可以了解到 1 2 <code>[hkey_local_machine \system \currentcontrolset \services \tcpip \parameters]</code> <code>tcpnumconnections = 0x00fffffe (default = 16,777,214)</code> 從值來看是1000多萬個接入限制,當然這緊緊是一個值實上目前作業系統和記憶體資源是否支援這麼多句柄執行個體也很難說……由于連接配接的接入緊緊是建立和配置設定相應的句柄資源。如果記憶體夠大的情況的确可以支援很多的連接配接數接入,當然還需要作業系統支援管理這麼多句柄執行個體。
針對一些同學說6w個連接配接的做一下簡單的測試
探讨.net Socket支援線上連接配接數量
從測試結果來看.net支撐這個線上連接配接數那是沒有壓力的,單個連接配接每10秒互動一個消息和一些新連接配接接入,如果沒消息互動估計cpu資源看不到有百份比。
在交流過程發現大家對并發的了解都有些不同,有些同學并發是指同時線上的連接配接數,但有些同學則了解為目前服務同時處理的消息量(秒)。其實兩者異差還是非常大的。一個簡單的例子現在你有10個客戶,他們同一天走來向你談業務累,不是約個時間一天談一個累呢?雖然總體工作量一樣,但前者很有可能産生資源崩潰導緻後面無法繼續工作……。同樣在服務處理上也一樣,連接配接數再多隻要不産生資料互動和邏輯處理隻是在記憶體裡占個坑是不影響cpu資源的。是以評估一個服務的時候最好是結合實際業務出發,如果客戶要求10w線上,而每個客戶十來秒才産生一個互動;那這種硬體可行性還是很好評估的;但如果業務上是每個客戶每秒都要互動大量業務資料,那從硬體資源和帶寬上就比較難以規劃,可能要做一些可行性測試才能評估出來。