2017-09-20 2 views
1

Hallo ich verwende Tornado, Django frammwork auf Backend zu Sockets Nachrichten auf Frontend zu behandeln. Ich bin nicht sehr vertraut mit meinem Projekt, aber es gibt eine Datei in meinem Projekt, wo Klassen sind, die websocket.WebSocketHandler und web.Application implementieren. Dies ist Teil der DateiWie sende ich Nachricht an Web-Socket mit Tornado

class Application(web.Application): 
    """ 
    Main Class for this application holding everything together. 
    """ 
    def __init__(self): 
     PROJECT_NAME = os.path.basename(os.getcwd()) 
     os.environ['DJANGO_SETTINGS_MODULE'] = PROJECT_NAME + 'tutorial/settings' 

     # Handlers defining the url routing. 
     handlers = [ 
      ('/room', SocketHandler), 
      ('/room/([a-zA-Z0-9|=%]*)$', SocketHandler), 
      ('/video_call', VideoCallSocketHandler), 
      ('/video_call/([a-zA-Z0-9|=%]*)$', VideoCallSocketHandler), 
     ] 

Im Frontend Teil ist eine Funktion:

var ws = new WebSocket('wss://domain.com:9003/video_call/' + conferenceId); 

ws.onmessage = function (ev) { 
    window.location.replace(redirectUrl); 
}; 

ich, dass diese Funktion optimal auszunutzen der Nachricht von unserem mobilen aplication glaube.

Also das Problem ist, dass ich möchte Nachricht an diese URL oder was auch immer es ist 'wss://domain.com:9003/video_call/' + conferenceId von meiner Python-Ansicht senden.

zum Beispiel:

def some_view_function(request, **kwargs): 
    conference_id = request.GET.data['conferenceId'] 
    ... 
    if something: 
     send message to wss://domain.com:9003/video_call/' + conference_id 

Wie kann ich das tun?

Antwort

0

Was ist mit dem Wrap-Django-Code von Tornado?

def main(): 
    os.environ['DJANGO_SETTINGS_MODULE'] = 'docs.settings' 
    application = get_wsgi_application() 
    container = tornado.wsgi.WSGIContainer(application) 

    tornado_app = tornado.web.Application(
     [('.*', tornado.web.FallbackHandler, dict(fallback=container))],   
    ) 

    server = tornado.httpserver.HTTPServer(tornado_app) 
    server.bind(8888) 
    server.start(0) 
    tornado.ioloop.IOLoop.instance().start() 

Kommunizieren Sie zwischen Django und Tornado Ich schlage vor, Kommunikation über die Warteschlange, wie Redis.

def some_view_function(request, **kwargs): 
    conference_id = request.GET.data['conferenceId'] 
    ... 
    if something: 
     send_to_queue() 

Auf Tornado-Seite Warteschlangen-Listener.

+0

Wie definiere ich 'conference_id' in' send_to_queue'. Woher weiß die Funktion, an welchen "WebSocket" die Nachricht gesendet wurde? – Przemek

Verwandte Themen