1

我想做一个实时应用程序。所以这里是场景 - 我有数据通过我的一个 COM 端口进入我的计算机,然后由 python 获取并显示。为此,我只使用了一个简单的 pythonserial模块,它通过串行端口读取数据并显示它。

现在这些数据对我来说是本地的。出于高端目的,我需要将这些数据发布到我的一个在线网站上,该网站运行着apache网络服务器,它将在全球范围内显示数据。

所以为了实时,我需要持续监控串口,取数据,并持续发布到web服务器(PHP端)。(读取串行数据并将其发布到服务器并行运行)。

现在的问题是——

  1. 如何同时监控来自 COM 端口的数据以将其发布到网络服务器?

  2. 如果我连续发送数据,网络服务器如何知道数据是否连续?对于这种方法,我想将数据保存到 webserver 的数据库中,并制作 PHP 脚本来持续监控数据库。告诉我一个更好的方法,如果你有

4

2 回答 2

0

在 Python 方面,最简单的方法是拥有两个线程。线程 1 将从串行线路读取,使用阻塞调用,并将它读取的所有数据放入线程安全队列中。线程 2 将抓取队列中的任何内容,将其发布到远程 PHP,(重试直到成功),休眠 2 秒并重复。

从 Python 调用的 PHP 脚本只需要将数据插入数据库。前端 PHP 脚本将从数据库中抓取数据并显示出来。

于 2013-03-18T00:07:53.550 回答
0

通常,当处理一个在一个接口上接收并在另一个接口上发送的实时应用程序时,您将需要几个线程和至少几个队列。
如果您希望您的程序是事件驱动的(强烈推荐!),您还应该包括在收到输入时触发的事件。

对于您的问题,我建议:

1 个 COM 读取
线程 1 个 COM 写入线程(如果您需要写入)
1 个 PHP 写入
线程 1 个 PHP 读取线程(如果您需要读取)
1 个 COM 输入队列
1 个 COM 输入事件

每次在 com 端口上接收到一些数据时,您都会让 COM 读取线程写入 COM 输入队列,如果您愿意,可以在将其放入队列之前验证这些数据。

然后 COM 输入队列会将 COM 输入事件设置为 true,这充当 PHP 写入队列的“停止”。

然后,PHP 队列将遍历所有已添加到 COM 输入队列的内容,直到它为空,将 COM 输入事件设置为 false,并在再次循环之前等待更多输入。

确保队列是线程安全的,或者在它周围放置一个互斥锁,这里有几个链接可以帮助你:

Python 锁
Python 事件
Python 队列


对于 Web 服务器端,您应该在向 Web 服务器发送数据时使用 httpPOST消息,根据您在请求中输入的内容,您可以将数据发送到 Web 服务器上的脚本,该脚本将验证、处理和存储它。

不幸的是,我不是这方面的专家,所以我不能给出很多提示。

于 2013-03-18T00:43:27.610 回答