Я собираюсь написать родную C++ службу Windows, которая должна собирать и хранить данные с клиентских настольных компьютеров, а может быть тысячи из них. Данные просты, такие как CPU%, Memory и некоторые другие данные из клиентского программного обеспечения, работающего на рабочих столах.
Каков наилучший способ архитектовать это взаимодействие клиент-сервер? Именованные трубы? TCP-сервер/клиент? Windows сокеты? WCF? Что-то другое? Или было бы лучше всего запускать SQL Server на сервере и устанавливать ли клиенты соединение с базой данных и отправлять такую информацию?
Я мог бы запустить многопоточный сервер Named Pipe в сервисе на сервере, но я не хочу генерировать поток для каждого соединения внутри службы с тысячами клиентов b/c, которые будут потреблять слишком много ресурсов серверной подсистемы. Клиенты будут находиться в локальной сети и через WAN.
Любое руководство ценится!
Вам не нужно писать сервер с нуля; вы уже можете получить доступ к счетчикам производительности Windows с помощью функций Performance Data Helper, описанных здесь: 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