为客户端-服务器通信构建 TCP/IP 服务器的最佳方式?

Posted

技术标签:

【中文标题】为客户端-服务器通信构建 TCP/IP 服务器的最佳方式?【英文标题】:Best way to architect a TCP/IP server for client-server communications? 【发布时间】:2014-11-06 12:39:48 【问题描述】:

我将编写一个本地 C++ Windows 服务,该服务需要收集和存储来自客户端台式计算机的数据,可能有数千台。数据很简单,例如 CPU%、内存以及桌面上运行的客户端软件的一些其他数据。

构建这种客户端-服务器通信的最佳方式是什么? 命名管道? TCP服务器/客户端?窗户插座? WCF?还有什么? 还是最好在服务器上运行 SQL Server 并让客户端与数据库建立连接并以这种方式发送信息?

我可以在服务器上的服务中运行多线程命名管道服务器,但我不想在服务中为每个连接生成一个线程,其中包含数千个客户端 b/c,这会消耗太多服务器子系统资源.客户端将位于本地网络和 WAN 上。

感谢任何指导!

【问题讨论】:

标准解决方案是使用 WMI。无需在客户端机器上安装任何软件,远程即可完成。 需要从客户端异步发送数据吗? 我正在获取标准数据和其他非操作系统数据,并且我有一个在桌面上运行的客户端。我对 WMI 的体验是,仅查询十几台计算机就占用了大量资源。还是 WCF 更好? 可以,数据可以异步发送。 “数千个”是模棱两可的。每秒有多少事件/数据?您如何使用收集到的数据?你愿意花多少开发效果?它可以从简单的 web+db 到量身定制的 tcp 服务器。 【参考方案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

【讨论】:

对,PDH 工作得很好,但我没有提到我正在从桌面上运行的客户端程序获取非操作系统数据。我将编辑说明。 太好了,那么您可以使用 Windows API 提供计数器来将您的数据导入系统,并使用 PDH 将其导出到服务器上。文档:msdn.microsoft.com/en-us/library/windows/desktop/… 在一个进程中拥有数千个线程来轮询数千个客户端似乎相当大且效率低下。

以上是关于为客户端-服务器通信构建 TCP/IP 服务器的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP通信协议各层内容

Qt学习第四天

雷达 tcp ip socket c++

tcp和ip有啥区别?

【网络】TCP/IP-传输层知识概要

socket库:Python实现TCP/IP客户和服务器通信