2014-11-06 81 views
0

我將要編寫一個本地C++ Windows服務,需要從客戶端桌面計算機收集和存儲數據,可能有數千個。數據很簡單,例如CPU%,內存以及桌面上運行的客戶端軟件的一些其他數據。構建用於客戶端 - 服務器通信的TCP/IP服務器的最佳方法?

構建此客戶端 - 服務器通信的最佳方式是什麼? 命名管道? TCP服務器/客戶端? Windows套接字? WCF?還有別的嗎? 或者最好在服務器上運行SQL Server並讓客戶端與數據庫建立連接並以這種方式發送信息?

我可以在服務器上的服務中運行一個多線程的命名管道服務器,但我不想在服務中爲每個連接生成一個線程,數千客戶端會花費太多的服務器子系統資源。客戶端將在本地網絡和WAN上。

任何指導表示讚賞!

+3

標準的解決方案是使用WMI。不需要在客戶機上安裝任何軟件,它可以遠程完成。 – 2014-11-06 12:45:40

+0

你需要異步發送來自客戶端的數據嗎? – user623396 2014-11-06 12:47:29

+0

我收到標準數據和其他非操作系統數據,並且我在桌面上運行了一個客戶端。我對WMI的經驗是,只需查詢十幾臺計算機就佔用大量資源。或者WCF可能更好? – JeffR 2014-11-06 12:49:39

回答

1

您不需要從頭開始編寫服務器;您可以使用這裏記錄的性能數據助手功能已經訪問Windows性能計數器:http://msdn.microsoft.com/en-us/library/windows/desktop/aa373214(v=vs.85).aspx

尤其PdhAddCounter,可以指定它可以是一個遠程計算機上的查詢路徑,按指定的位置:http://msdn.microsoft.com/en-us/library/windows/desktop/aa373193(v=vs.85).aspx

+0

對,PDH工作得很好,但我沒有提到我從臺式機上運行的客戶端程序獲取非OS數據。我將編輯描述。 – JeffR 2014-11-06 12:51:24

+1

太棒了,那麼你可以使用Windows API提供計數器來將數據存入系統,並使用PDH在服務器上獲取它。文檔:http://msdn.microsoft.com/en-us/library/windows/desktop/aa373165(v=vs.85).aspx – 2014-11-06 12:52:31

+0

似乎相當大並且效率低下,因此在進程中有成千上萬個線程來輪詢數千個的客戶。 – JeffR 2014-11-06 19:13:54