1

我想运行一个网络套接字服务器来为树莓派板提供一个接口。具体来说,我想连续轮询传感器,参考变量处理来自网络套接字的输入,然后在需要时运行电机。

我以为我可以__init__在子类上使用一个方法来WebSocketServerProtocol执行轮询传感器和正在运行的电机,并使用一种onMessage()方法来处理来自客户端的输入并返回系统的当前状态,但是我担心我不正确理解WebSocketServerProtocoland WebSocketServerFactory,我似乎无法让后台任务在连接之间持续存在。

实现我想要的最佳方式是什么?也许高速公路是矫枉过正——在连接的计算机上永远只有一个客户端,所以从这个意义上说并发不是问题。我只是希望电机和轮询传感器的运行不要阻塞以确保平稳运行。

4

1 回答 1

1

您可以做的一件事是在不同线程上运行传感器轮询和 http/motor 模块。

我认为您可以轻松解决您的问题,而无需为高速公路创建不必要的额外依赖项。

检查 Python 提供的SimpleHTTPServer(python 2.x) 或http.server(python 3.x) 模块。

您只需要对该类进行子SimpleHTTPRequestHandler类化以提供一个do_POST()do_GET()多个完成工作的方法(它们代替您的onMessage()调用),如下面的大纲所示:

import threading

from SimpleHTTPServer import SimpleHTTPRequestHandler
from BaseHTTPServer   import BaseHTTPServer

def poll():
   ...

class MyHandler(SimpleHTTPRequestHandler):
    protocol_version = "HTTP/1.0"
    def do_POST(self):
        if all_ok_with_the_request:
            motor.run()
    def do_GET(self):
        self.wfile.write("status = {}".format(status))

def runServer(address, port):
   httpd = BaseHTTPServer( (address, port), MyHandler )
   httpd.serve_forever()

threading.Thread(target=poll).run()
threading.Thread(target=runServer).run()
于 2014-07-01T16:54:26.613 回答