2010-11-10 25 views
6

我創建一個服務器,監控客戶端的網頁上的在線狀態。如何處理高達10萬個HTTP連接在.net

  • 將有80-100,000(八十萬)個同步客戶端進行監控。
  • 我使用.NET來寫這篇文章。

客戶端將使用JavaScript(在HTML頁面上)聯繫一個(單獨的)服務器,告訴服務器他們是活着的/在線​​的。

我正在考慮兩種方法之一:

  1. 與保活定期發送持久連接。 這會給我更多的更高的精度上,當客戶端斷開連接,我也不需要更新存儲結構(onlineinfo)過於頻繁,因爲我們知道,當客戶來了又走。網絡設備/帶寬的其他好處。

  2. 客戶端(RE)的時間間隔連接到服務器告訴他們還活着。 這需要大量的連接,並且必然會降低準確性。我想像2-3分鐘的時間間隔是我們能做的最好的。每秒80k/120 = 660個連接... ASP.Net不會執行得太快,所以我不確定這一點。 8核心系統=每次執行約10毫秒。

有了這麼多的連接,顯然有一些限制。例如,我不能同時產生多個線程。 1請求IIS產生一個ASP.Net應用程序將使用1個線程,直到請求完成。

是寫一個獨立的HTTP服務器的最佳選擇? 不.Nets TcpListener利用httpd.sys(IIS)?

任何(建設性)關於這個問題的想法將不勝感激。

編輯:添加到這個職位按照尼古拉斯Repiquets答案的鏈接找到一些有用的鏈接:

+7

Justa認爲 - 您是否考慮過使用多個服務器的負載均衡策略? – byte 2010-11-10 14:22:42

+0

只要客戶不需要對每個保活「請求」進行太多處理,我就沒有理由認爲你不應該這樣做。 – Gabe 2010-11-10 15:12:19

+0

有趣的問題!我可以告訴你的唯一的事情就是你正在玩.NET和TCP/IP的限制。無論您實施什麼解決方案,首先要考慮如何擴大規模。 (將負載分爲多個服務器) – 2010-11-10 15:12:42

回答

4

100 000持久連接是不是一個可行的選擇。

發送HTTP請求的時間間隔更方便,編寫專用的HTTP服務器是一個有趣的選擇IMO。

看看this question一些方向。

+0

爲什麼它不是一個可行的選擇?只要Windows不支持/來自同一個IP對,Windows就支持這麼多連接,在這種情況下,應用65k限制。 – 2010-11-10 14:46:05

+1

遠在用完自由港之前,你會耗盡內存。嘗試_gestimate_單個連接的內存佔用和乘以100000 ... ... – 2010-11-10 15:08:57

+1

Nicolas:假設每個連接需要1k數據,並且您有100,000個連接,則總使用量將爲100,000k或100M。自從我有一臺沒有100M內存的服務器已經過去了十多年。 – Gabe 2010-11-10 15:14:12

0

我知道你具體說.NET,但你應該看看NodeJS,因爲它確實是你想要做的,但它是服務器端JavaScript。