2016-04-19 12 views
0

Ist es möglich, wenn mehrere Socket-Clients mit einem Tornado-WebSocket-Server verbunden sind, eine Nachricht an eine bestimmte zu senden? Ich weiß nicht, ob es eine Möglichkeit gibt, die ID eines Clients zu erhalten und dann eine Nachricht an diese ID zu senden.Python Tornado WebSocket Server Nachricht an bestimmten Client senden

Mein Client-Code ist:

from tornado.ioloop import IOLoop, PeriodicCallback 
from tornado import gen 
from tornado.websocket import websocket_connect 


class Client(object): 
    def __init__(self, url, timeout): 
     self.url = url 
     self.timeout = timeout 
     self.ioloop = IOLoop.instance() 
     self.ws = None 
     self.connect() 
     PeriodicCallback(self.keep_alive, 20000, io_loop=self.ioloop).start() 
     self.ioloop.start() 


    @gen.coroutine 
    def connect(self): 
     print "trying to connect" 
     try: 
      self.ws = yield websocket_connect(self.url) 
     except Exception, e: 
      print "connection error" 
     else: 
      print "connected" 

      self.run() 

    @gen.coroutine 
    def run(self): 


     while True: 
      msg = yield self.ws.read_message() 
      print msg 
      if msg is None: 
       print "connection closed" 
       self.ws = None 
       break 

    def keep_alive(self): 
     if self.ws is None: 
      self.connect() 
     else: 
      self.ws.write_message("keep alive") 

if __name__ == "__main__": 
    client = Client("ws://xxx", 5) 

Antwort

0

Wenn Ihr Client eine Verbindung zum Server websocket wird Methode aufgerufen 'offen' auf WebSocketHandler, in dieser Methode können Sie Steckdose im Appliaction halten.

So:

from tornado import web 
from tornado.web import url 
from tornado.websocket import WebSocketHandler 


class Application(web.Application): 
    def __init__(self): 
     handlers = [ 
      url(r"/websocket/server/(?P<some_id>[0-9]+)/", WebSocketServer), 
     ] 
     web.Application.__init__(self, handlers) 
     self.sockets = {} 


class WebSocketServer(WebSocketHandler): 

    def open(self, some_id): 
     self.application.sockets[some_id] = self 

    def on_message(self, message): 
     self.write_message(u"You said: " + message) 

    def on_close(self): 
     print("WebSocket closed") 

Sie können auch Nachricht für die Verbindung verwenden, in dieser Mitteilung, die Sie haben Socket-ID zu sagen und Steckdose in der Anwendung speichern.

Verwandte Themen