2016-05-12 7 views
1

私は背景にある竜巻websocketを作成しようとします。 は、別のデバイスからの入力イベントを処理します。竜巻websocket非同期バックグラウンドタスク

ユースケース:アンドロイドアプリからwebsocket接続でラズベリーパイを制御します。

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) 

私は、次のimplemtationとの接続を作成することができています

私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) 

コア機能このようにして動作します。

しかし、私が前に言ったように、私はこれが本当に正しいかどうかはわかりません。

関連する問題