web套接字的后台任务

2024-03-28 13:19:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我想运行一个WebSocket服务器来提供一个到raspberry pi板的接口。具体地说,我想连续地轮询一个传感器,根据一个变量处理来自web套接字的输入,然后在需要时运行电机。在

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

实现我想要的最好方法是什么?也许高速公路是过度杀戮-永远只有一个客户端在连接的计算机上,所以在这个意义上并发不是一个问题。我只是希望运行中的电机和轮询传感器不要阻塞,以确保顺利运行。在


Tags: 方法服务器web客户端init状态系统pi
1条回答
网友
1楼 · 发布于 2024-03-28 13:19:55

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

我认为你可以很容易地解决你的问题,而不会对高速公路造成不必要的附加依赖。在

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

您只需要将SimpleHTTPRequestHandler类的子类化,以提供一个do_POST()或{}方法来完成工作(它们代替了您的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()

相关问题 更多 >