Javascript和Python—最佳通信方法

Javascript和Python—最佳通信方法,javascript,php,python,ajax,lamp,Javascript,Php,Python,Ajax,Lamp,我正在尝试制作一个html/javascript控制的树莓pi机器人 到目前为止,我已经安装了一个LAMP服务器,我正在托管一个带有按钮的本地网页,这些按钮可以触发事件,并通过AJAX向我的机器人发送命令。AJAX调用php脚本,php脚本调用python脚本(无CGI)来控制机器人 这个解决方案目前正在为我工作,我可以从html控制我的raspberry pi硬件,并简单地来回发送数据 现在我想做的是,在我的网页上,有一个启动和关闭机器人的开/关按钮,还有其他事件(目前通过android设备中

我正在尝试制作一个html/javascript控制的树莓pi机器人

到目前为止,我已经安装了一个LAMP服务器,我正在托管一个带有按钮的本地网页,这些按钮可以触发事件,并通过AJAX向我的机器人发送命令。AJAX调用php脚本,php脚本调用python脚本(无CGI)来控制机器人

这个解决方案目前正在为我工作,我可以从html控制我的raspberry pi硬件,并简单地来回发送数据

现在我想做的是,在我的网页上,有一个启动和关闭机器人的开/关按钮,还有其他事件(目前通过android设备中的加速计测量倾斜角度)来控制机器人的速度。这就是我对事情如何运作的程序感到困惑的地方


当我调用AJAX来启动robot时,直到python脚本结束(robot关闭),AJAX调用才会关闭。因此,我运行了一个python脚本(start.py),其中包含我的robot对象,其中存储了更改速度的方法。如果我在JS中有单独的事件来更改速度(发送对changespeed.py的调用),那么如何更改存储在已在运行的不同python脚本(start.py)中的对象的属性(参见下图)

到目前为止,我已经想到了可能的解决方案:

1) 将对象存储在内存中的某个位置。可能作为python对象,或者将其属性存储在SQL数据库中。这样,changespeed.py(或直接使用Javascript)可以更改内存中的速度属性,start.py可以连续读取它们

2) 让python尝试从javascript变量中检索这些值,而不是通过AJAX将新的速度值发送给python。换句话说,不是javascript向python提供数据,而是让python从javascript获取数据(抓取?)

3) 放弃我目前让javascript和python通过AJAX和php进行通信的方法,建立一个websocket来交换数据。我不知道这是怎么回事,但它可能是我需要的解决方案

4) 我也没有做过任何关于中断的编程,对此我也不太了解。是否可以让我的主脚本运行,当速度需要改变时,我可以随时发送中断

如果我的问题有点含糊或罗嗦,我很抱歉。我现在脑子里有很多事情。如果不清楚,请告诉我。多谢各位

TLDR:让javascript执行python脚本,然后异步向该脚本提供数据的最佳方式是什么


我觉得您正在寻找内存中的数据存储,例如。使用redis,您可以在内存中创建一个变量,任何支持redis的编程语言都可以访问该变量(几乎所有编程语言都支持)


Redis还具有发布/订阅功能,允许您在数据发布到特定频道时执行特定逻辑。例如,如果您的javascript程序在redis中更改了某些内容,那么您的python程序可以订阅该特定变量,并且知道在javascript程序更改该变量的值时执行它自己的逻辑。有关发布/订阅的更多信息,请查看

,我觉得您正在寻找内存中的数据存储,例如。使用redis,您可以在内存中创建一个变量,任何支持redis的编程语言都可以访问该变量(几乎所有编程语言都支持)


Redis还具有发布/订阅功能,允许您在数据发布到特定频道时执行特定逻辑。例如,如果您的javascript程序在redis中更改了某些内容,那么您的python程序可以订阅该特定变量,并且知道在javascript程序更改该变量的值时执行它自己的逻辑。有关发布/订阅的更多信息,请查看

您可以使用cgi-通用网关接口,通过使用cgi cgi.FieldStorage()您可以使用python获取数据。它支持海量数据传输和快速。它支持所有浏览器

您可以使用cgi-通用网关接口和使用cgi cgi.FieldStorage()你可以用python获取数据。它支持巨大的数据传输和快速传输。它支持所有浏览器

我已经使用Flask socketIO成功地在我的网页和我的机器人之间建立了一个websocket。我现在可以用安卓手机中的加速计控制我的机器人,但是机器人的反应太慢了。有时,机器人对我手机发出的命令做出反应需要2秒钟。我相信问题的一部分是我的机器人通过我家的wifi扩展器连接到我的WLAN。因此,我计划使用我的第二根wifi天线作为接入点,直接连接到机器人,而不是通过wifi扩展器将数据传输到路由器,再通过扩展器返回,最后传输到机器人

最终,我计划进入android应用程序开发阶段(我想通过USB将我的第二部智能手机连接到机器人上,并可以使用加速计、磁强计、GPS和摄像头)。一旦我这样做了,我会考虑通过蓝牙而不是websocket连接我的手机和机器人


我仍然不知道这是否是最好的方法,但这是我目前的解决方案

我已经使用Flask socketIO成功地在我的网页和我的机器人之间建立了一个websocket。我现在可以用安卓手机中的加速计控制我的机器人,但是机器人的反应太慢了。有时,机器人对我手机发出的命令做出反应需要2秒钟。我相信问题的一部分是我的机器人通过我家的wifi扩展器连接到我的WLAN。因此,我计划使用我的第二根wifi天线作为接入点,直接连接到机器人,而不是通过wifi扩展器将数据传输到路由器,再通过扩展器返回,最后传输到机器人

最终我打算进入一个