【发布时间】:2018-05-12 01:50:27
【问题描述】:
我正在尝试制作一个 html/javascript 控制的树莓派机器人。
到目前为止,我已经安装了 LAMP 服务器,并且正在托管一个带有按钮的本地网页,这些按钮可以触发事件并通过 AJAX 向我的机器人发送命令。 AJAX 调用一个 php 脚本,该脚本调用一个 python 脚本(无 CGI)来控制机器人。
这个解决方案目前对我有用,我可以通过 html 控制我的树莓派硬件并简单地来回发送数据。
现在我想要做的是,在我的网页上,有一个开/关按钮,用于初始化和关闭机器人,以及其他事件(当前从 android 设备中的加速度计测量倾斜角度)控制机器人的速度。这就是我对事情如何运作的过程感到困惑的地方。
当我进行 AJAX 调用以启动机器人时,该 ajax 调用在 python 脚本结束(机器人关闭)之前不会关闭。因此,我运行了一个 python 脚本(start.py),其中包含我的机器人对象,其中存储了更改速度的方法。如果我在 JS 中有单独的事件来更改速度(发送对 changespeed.py 的调用),我如何更改存储在已经运行的不同 python 脚本(start.py)中的对象的属性(见图下面)?
到目前为止我想到的可能的解决方案:
1) 将对象存储在内存中的某处。也许作为一个 python 对象,或者将其属性存储在 SQL 数据库中。这样,changespeed.py(或直接Javascript)可以改变那个内存中的速度属性,并且start.py可以连续读取它们。
2) 与其通过 AJAX 将新的速度值发送到 python,不如让 python 尝试从 javascript 变量中检索值。换句话说,不是 javascript 向 python 提供数据,而是让 python 从 javascript 中获取数据(抓取?)。
3)放弃我目前让javascript和python通过AJAX和php进行通信的方法,并设置一个websocket来交换数据。我还不知道它是如何工作的,但它可能是我需要的解决方案。
4) 我也没有对中断进行任何编程,对此我了解不多。是否可以让我的主脚本运行并且当速度需要改变时,我可以随时发送中断?
如果我的问题有点含糊或冗长,我很抱歉。我现在脑子里有很多事情要做。如果不清楚,请告诉我。谢谢。
TLDR:让 javascript 执行 python 脚本然后异步向该脚本提供数据的最佳方法是什么
【问题讨论】:
-
我所知道的最好的方法是让 JS 做它需要做的任何事情,然后通过 django 或类似的运行将 POST 发送回服务器。
-
“如何更改存储在已运行的不同 python 脚本 (start.py) 中的对象的属性”。在我的脑海中,也许内存中的程序可能有一个线程来监听到它的套接字连接。您的 ajax 请求调用 Web 服务器上的服务器端脚本,该脚本与正在运行的进程建立套接字连接并向其发送数据。正在运行的进程接受连接并对数据进行操作。不知道你是如何用 Python 做这些的,但这是一种理论上的方法。
-
我目前正在研究使用 websockets。根据我的研究,这似乎是我想做的最好的方法。我成功地创建了一个从 python 到 JS 的 websocket,但是 Apache2 阻碍了我。我目前正在研究是否应该使用 3rd 方软件使 apache2 兼容、使用 nginx 或使用带有 socketio 的烧瓶框架
标签: javascript php python ajax lamp