使用python从多台计算机实时发送数据到中心位置的方法



我正在寻找一种可靠的方法,将数据从多台计算机发送到一台中央计算机,该计算机将接收、处理和分析所有数据。所有计算机都将在同一网络上。

我将从机器发送文本,所以理想情况下,它将是我需要发送的文件,甚至可能是一个XML文件,这样我就可以轻松地将其解析到数据库中。

我面临的主要问题是,我需要在足够实时的情况下完成这项工作。例如,如果一个事件发生在pc1上,我需要能够将该事件以及任何相关信息发送回中央电脑,以便几乎立即使用和查看。

该计划是编写一个python程序,该程序可能充当一种客户端,检测事件并将其发送到中央电脑上的服务器程序。

有人建议用一种可靠的方式将数据从多台计算机发送到同一网络上的一台中央计算机/服务器吗?最好不要上网。

有很多可能的解决方案,但我的建议是使用数据库来解决这个问题。我更喜欢MySQL,因为它免费且易于安装。它是即时的,您可以避免同时更新文件锁定问题,因为MySQL的Innodb功能会自动处理行锁定。实际上,设置数据库比尝试使用文件或其他通信机制编写自己的解决方案更容易(除非您已经有其他技术的经验)。多台计算机也不是问题,安全性也是内置的。

只需设置MySQL服务器并编写客户端应用程序,即可将数据从多台计算机更新到服务器。然后,您可以编写服务器应用程序来处理输入,该程序可以驻留在MySQL服务器或任何其他计算机上。

Python是一种优秀的编程语言,通过现成的MySQL模块提供了全面的支持。这个解决方案也是可扩展的,因为您可以从基本的命令行程序开始。。。然后用pyqt创建桌面用户界面,以后如果需要,可以添加web界面。

TCP上的Netcat具有可靠性、低开销和简单性。

我假设您只在安全局域网上工作,因为您不谈论安全性,而只谈论低延迟。事实上,有许多解决方案,每个方案都有其优点和缺点。

  1. 使用UDP的简单消息。网络、客户端和服务器的开销非常低。缺点:在UDP中,您永远无法确保消息不会丢失。用例:可以随时以高频率生成的小块信息,如果丢失则不重要
  2. 通过预先建立的TCP连接发送的消息。服务器、客户端和网络的高开销,因为每个客户端都将建立并维护与服务器的连接,并且服务器将同时监听其所有客户端。缺点:如果连接中断,需要重新打开连接,服务器将不得不多路传输io,您必须实现一个协议来分离消息。用例:您不能释放任何消息,它们必须尽快发送,并且每个客户端都必须序列化自己的消息
  3. TCP上的消息,每条消息都将使用自己的连接。中等开销。缺点:由于每个消息都建立了新的连接,因此可能会在高频事件中引入延迟和开销。用例:低频率事件,但单个客户端PC可能同时发送多条消息

数据库是一个有趣的答案。

就我个人而言,我可能会为每条消息使用一个新会话的TCP。

编写可靠的TCP客户端/服务器代码在很大程度上得益于http://stromberg.dnsalias.org/~strombrg/bufsock.html-否则,在高负载和/或长网络路径下,您往往会遇到看似难以理解的问题。

一旦启动了TCP,就可以为文件系统中的每条消息创建一个新文件。我发现这比使用数据库更简单,但不管怎样。如果将时间、主机名和nonce放在文件名中,那么在并发方面应该不会有任何困难。

第三种方法是REST接口。我对此没有太多经验,但这几天很流行。

相关内容

最新更新