------------------更新2015.12.13 ---------------
目前,我正在开发一个在 windows
上具有网络功能的程序假设有四台PC,我选择一台作为主节点,其他一台是奴隶节点。一些节点需要传递xml文件(仅一次)和其他一些实时信息(例如:每5秒传递一次数据)到主节点。
我对网络编程一无所知。是否存在框架可以处理这个问题?
至于如何解决这个问题,我有一些我无法做出选择的要点:
哪个库或框架易于使用?winsocket
?POCO
?QT networkframe
或其他?
我应该关注哪个级别的网络?socket
?或者只是使用已经打包的HTTP request
以便不需要关心套接字的实现?
由于必须传递一些实时信息,设计这个网络功能有什么重点吗?
答案 0 :(得分:0)
一种可能性是完全抽象出“网络”部分,并使用众多RPC机制之一,因此客户端只需将参数传递给函数,然后不久,在服务器上调用一个函数,相同的参数。
仅举一个例子,我曾经多次使用Apache Thrift。最近我使用Google RPC做了一些工作。两者似乎都有效,尽管Thrift肯定是两者中比较成熟的。根据您的需求,还有更多可供选择的可能性。
答案 1 :(得分:0)
有很多方法可以做到这一点。 最简单的是不使用网络API本身。 使用文件系统。 从站可以写入服务器,服务器将在从站完成写入后获取文件。您可以依赖窗口来强制执行SHARE_READ / SHARE_WRITE。如果客户端使用SHARE_NONE创建文件,那么在关闭文件之前,没有其他人可以打开该文件。如果客户端丢弃网络连接,崩溃等,这只会失败。更健壮的方法是客户端创建名称为" \ server-name \ sharename \ CLIENT_X_TEMP.xml"的文件,当服务器准备好使用它时,重命名为" \ server-name \ sharename \ _SERVER_PLEASE_README_NOW.xml"。服务器只会查找正确名称的文件。 看起来很低技术,但它安全,便携,强大,易于工作。由于您不需要任何特殊的API,因此您可以使用任何有权访问文件系统的语言编写客户端和服务器。
如果要使用直接网络API,可以使用DCOM。它允许您为客户端调用和要实现的服务器指定类似C / C ++的接口。它处理序列化数据和传输到另一台机器的所有复杂性。这非常灵活,客户端和服务器处于相同的进程,同一台机器上的不同进程或不同的机器上。 (微软多年来以多种名称称呼这项技术。" base"层是" RPC",然后是COM,D-COM,ActiveX,可能还有一些其他名称。
套接字非常容易设置,并且比DCOM更容易移植,但是相当简单" raw"。您需要发明自己的协议来发送数据,因为套接字只是传输数据束。
HTTP只是一种通常通过套接字传输的协议。这里的优点是可以使用许多不同的HTTP库,以及许多现成的服务器。例如,IIS可用于处理传入的请求并自动将它们移交给您的代码 - 您可以通过多种方式对服务器进行编码,并且Microsofts Visual Studio对此有很好的支持。
我没有使用过poco或QT,所以我无法发表评论。