2014-07-01 66 views
1

我想運行一個網絡套接字服務器來爲樹莓派套接字板提供接口。具體來說,我想連續輪詢一個傳感器,參考一個變量處理來自web套接字的輸入,然後在需要時運行電機。網絡套接字服務器的後臺任務

我想我能夠有一個子類WebSocketServerProtocol該做的輪詢傳感器和行駛電動機的__init__方法,並與onMessage()方法從客戶端但是處理輸入和返回系統的當前狀態,我擔心我沒有正確理解WebSocketServerProtocolWebSocketServerFactory,並且我似乎無法在後臺任務中保持連接。

什麼是實現我想要的最好方法?也許高速公路是過度的 - 在連接的計算機上只會有一個客戶端,所以這種意義上的併發不是問題。我只是喜歡馬達和輪詢傳感器的運行不要阻塞,以確保順利運行。

+0

剛爲了澄清,網絡套接字需要更新用於處理傳感器數據和調整電機的臨界值。然而,傳感器/電機控制系統需要連續運行,而不僅僅是響應特定的請求。 – bjw

回答

1

你可以做的一件事是在不同線程上運行傳感器輪詢和http /電機模塊。

我認爲你可以輕鬆解決你的問題,而不會對高速公路造成不必要的附加依賴。

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

你只需要繼承SimpleHTTPRequestHandler類,以提供一個do_POST()do_GET()方法(s)表示,做的工作(他們把你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() 
相關問題