我創建一個服務器,監控客戶端的網頁上的在線狀態。如何處理高達10萬個HTTP連接在.net
- 將有80-100,000(八十萬)個同步客戶端進行監控。
- 我使用.NET來寫這篇文章。
客戶端將使用JavaScript(在HTML頁面上)聯繫一個(單獨的)服務器,告訴服務器他們是活着的/在線的。
我正在考慮兩種方法之一:
與保活定期發送持久連接。 這會給我更多的更高的精度上,當客戶端斷開連接,我也不需要更新存儲結構(onlineinfo)過於頻繁,因爲我們知道,當客戶來了又走。網絡設備/帶寬的其他好處。
客戶端(RE)的時間間隔連接到服務器告訴他們還活着。 這需要大量的連接,並且必然會降低準確性。我想像2-3分鐘的時間間隔是我們能做的最好的。每秒80k/120 = 660個連接... ASP.Net不會執行得太快,所以我不確定這一點。 8核心系統=每次執行約10毫秒。
有了這麼多的連接,顯然有一些限制。例如,我不能同時產生多個線程。 1請求IIS產生一個ASP.Net應用程序將使用1個線程,直到請求完成。
是寫一個獨立的HTTP服務器的最佳選擇? 不.Nets TcpListener利用httpd.sys(IIS)?
任何(建設性)關於這個問題的想法將不勝感激。
編輯:添加到這個職位按照尼古拉斯Repiquets答案的鏈接找到一些有用的鏈接:
- Get Closer to the Wire with High-Performance Sockets in .NET
- Tips/techniques for high-performance C# server sockets
- High Performance TCP/IP Server using C#.NET
Justa認爲 - 您是否考慮過使用多個服務器的負載均衡策略? – byte 2010-11-10 14:22:42
只要客戶不需要對每個保活「請求」進行太多處理,我就沒有理由認爲你不應該這樣做。 – Gabe 2010-11-10 15:12:19
有趣的問題!我可以告訴你的唯一的事情就是你正在玩.NET和TCP/IP的限制。無論您實施什麼解決方案,首先要考慮如何擴大規模。 (將負載分爲多個服務器) – 2010-11-10 15:12:42