从一台机器到另一台机器每1-30秒发送一次结果的有效方法

时间:2017-05-22 14:19:40

标签: python python-2.7 python-3.x

关键点:

  • 我需要每隔1-30秒从一台机器向另一台机器发送约100个浮点数。
  • 第一台机器通过连接到它的传感器捕获这些值。
  • 第二台机器正在侦听它们,将它们传递给http服务器(nginx),电报机器人和另一个发送带警报的电子邮件的程序。

你会怎么做?为什么? 请准确。这是我第一次使用socket和python,但我相信我能做到这一点。只要给我关键细节,让我变得轻松! 如果你认为它是一个微妙的部分,那么核心的一小部分(几行)将会受到赞赏,但我的问题的主要目标是看到全局。

2 个答案:

答案 0 :(得分:2)

这里主要是决定连接设计和选择协议。即您是否可以与服务器建立持久连接,或者每当新数据准备就绪时进行连接。

然后您将使用HTTP POST或Web套接字或普通套接字。您是否完全依赖nginx或您的数据捕获器将是另一个服务。

如果其他人将连接到nginx以查看网站等,这将是一种最安全的方式。

编写或使用其他服务器在另一个端口上运行。例如,另一个nginx进程就是为了这个。然后使用SSL(即HTTPS)进行基本身份验证,以防止其他人滥用连接。

然后在客户端,每隔x秒对所有数据(pickle.dumps()或json等)创建一个数据包,然后使用您的凭据连接到您的端口并传递数据包。

Python脚本可能会在那里等待它。

或者你从头开始用Python编写一个套接字服务器(不是特别难)来等待你的数据包。 需要注意的是,您必须实现协议和安全性。但是你获得了一些其他的好处。如果您愿意或需要,更容易维护持久连接。我不认为它是必要的,它可以变得笨重的代码中断恢复。 不,只需等待一些端口进行连接。客户端必须清楚地标识自己(否则您会立即断开连接),它必须证明它与您的协议进行通信然后发送数据。 使用SSL套接字执行此操作,以便您不必自己实施加密以保留身份验证数据。您甚至可以仅提前依赖构建的密钥来保证安全性,然后只传递数据。

不要担心速度。套接字由操作系统处理,如果您使用的是类Unix系统,则可以在需要的时间间隔内连接多次。没有任何简单的DoS攻击不会对它造成太大影响。

如果在Windows上,最好使用一些已完成的服务器,因为Windows有时不会按时释放套接字,因此您将被迫等待或做一些hackery以避免这种不幸的行为(非阻塞套接字和重用addr然后一些flo控制将需要)。

只要您的数据很小,您就不必担心服务器协议。我会自己使用HTTPS,但我会用Python编写自己的轻量级服务器,或者修改并运行一个来自互联网的示例。不过那就是我。

答案 1 :(得分:0)

最简单的方法是将N个浮点数convert them to a binary message using struct.pack(),然后send them via a UDP socket带到目标计算机(如果它在单个局域网上,你甚至可以使用UDP多播,那么如果需要,多个接收器可以获得数据。您可以在一个UDP数据报中安全地发送最多60到170个双精度浮点数(取决于您的网络)。

这不需要应用程序协议,可以使用Wireshark在网络级别轻松调试,效率很高,并且可以轻松实现任何语言的其他发布者或订阅者。