我需要通過專有協議通過TCP連接數千個客戶端以循環獲取數據。我需要用C#編寫.NET服務器應用程序。通過數千個TCP套接字輪詢
第一次嘗試是爲每個TCP套接字創建一個自己的線程,該線程工作正常,但需要大量的CPU使用。
我發現改用.NET線程池會更好。據我所知(http://msdn.microsoft.com/en-us/library/ms973903.aspx)我可以使用定時器,以便讓每個套接字在給定的時間週期(如1秒)週期性地獲取數據。這對我來說不起作用,因爲一旦連接打開,套接字就會超時,因爲在打開套接字再次打開之前,有很多套接字必須打開。
另一個嘗試是使用異步回調。這會適用於我,但我不知道如何讓套接字週期性地獲取數據?
「成千上萬」和「線索」這些詞不能相互結合。嘗試查看是否可以使用'await'關鍵字進行延續,這將允許您針對阻止端口編寫代碼,而不會經常實際阻止代碼。這就是Erlang和Stackless Python背後的原理 - 專爲網絡併發而構建的兩種語言。 – 2012-04-24 14:53:28
爲什麼要循環客戶端來獲取數據?它會更簡單(儘管這是相對的),只需在每個套接字上保留一個異步讀取並在數據到達時處理數據。如果您真的需要循環讀取,則可以推遲異步讀取的重新發布,直到所有其他套接字都被服務。 – 2012-04-24 14:54:03
只是不投票。 – 2012-04-24 14:54:04