2016-05-12 182 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) 

,你可以看到我刚开始在主文件中的循环调用后核心功能。这样就可以工作。

但正如我之前所说,我不知道这是否我真的正确。