2016-05-12 123 views
1

我嘗試創建一個龍捲風websocket,它在後臺。 來處理來自另一個設備的輸入事件。龍捲風websocket異步後臺任務

用例:從android應用程序中用websocket連接控制覆盆子pi。

我能夠創建具有以下implemtation連接:

main.py:

import sys 

from sys import stdin 
from websocket import connection 


def main(args): 
    print "start application" 
    port = 7004 
    if args[0] != port: 
     port = args[0] 

    connection.WebSocketConnection(port) 
    core() 


def core(): 
    run = True 

    while run: 
     userinput = stdin.readline() 
     print userinput 

     if userinput == 'quit': 
      print "quit app" 
      sys.exit() 

if __name__ == "__main__": 
    main(sys.argv) 

連接處理程序:

import tornado.web 
import message.MessageHandler 

from message.messageConstructor import MessageConstructor 
from tornado.web import asynchronous 


class WebSocketHandler(tornado.websocket.WebSocketHandler): 
    def open(self): 
     print 'new connection' 
     self.send(message.MessageHandler.serialize(MessageConstructor('Engine1', '100'))) 

    def on_message(self, rawMessage): 
     print rawMessage 
     obj = message.MessageHandler.deserialize(rawMessage) 
     print(obj.target) 

    def on_close(self): 
     print 'connection closed' 

    def check_origin(self, origin): 
     return True 

    def send(self, message): 
     self.write_message(message) 

連接:

import tornado.httpserver 
import tornado.websocket 
import tornado.ioloop 
import tornado.web 
import socket 

from websocket import connectionHandler 


class WebSocketConnection(): 
    def __init__(self, port): 
     self.socketHandler = connectionHandler.WebSocketHandler 

     application = tornado.web.Application([ 
      (r'/', self.socketHandler), 
     ]) 

     http_server = tornado.httpserver.HTTPServer(application) 
     http_server.listen(7004) 
     myIP = socket.gethostbyname(socket.gethostname()) 
     print '*** Websocket Server Started at %s***' % myIP 
     tornado.ioloop.IOLoop.instance().start() 

    def send(self, message): 
     self.socketHandler.send(message) 

一世n main.py文件在創建websocket之後起作用,並且此函數從不被調用。我想這是龍捲風異步鏈的問題。

有什麼建議嗎? 在此先感謝。

回答

0

我想出了一個辦法,但我不確定這是否正確。反正在這個集合了它的工作原理:

main.py:

import sys 

from sys import stdin 
from websocket import connection 
from tornado.ioloop import IOLoop 


def main(args): 
    print "start application" 
    port = 7004 
    if args[0] != port: 
     port = args[0] 

    connection.WebSocketConnection(port) 
    core() 

    IOLoop.instance().start() 


def core(): 
    run = True 

    while run: 
     userinput = stdin.readline() 
     print userinput 

     if userinput == 'quit': 
      print "quit app" 
      sys.exit() 

if __name__ == "__main__": 
    main(sys.argv) 

connection.py:

import tornado.httpserver 
import tornado.websocket 
import tornado.ioloop 
import tornado.web 
import socket 

from websocket import connectionHandler 


class WebSocketConnection(): 
    def __init__(self, port): 
     self.socketHandler = connectionHandler.WebSocketHandler 

     application = tornado.web.Application([ 
      (r'/', self.socketHandler), 
     ]) 

     http_server = tornado.httpserver.HTTPServer(application) 
     http_server.listen(7004) 
     myIP = socket.gethostbyname(socket.gethostname()) 
     print '*** Websocket Server Started at %s***' % myIP 

    def send(self, message): 
     self.socketHandler.send(message) 

,你可以看到我剛開始在主文件中的循環調用後核心功能。這樣就可以工作。

但正如我之前所說,我不知道這是否我真的正確。