2013-08-30 19 views
9

ich diesen einfachen Code für einen WebSocket-Server:Python Tornado-Nachricht an alle Verbindungen senden

import tornado.httpserver 
import tornado.websocket 
import tornado.ioloop 
import tornado.web 
import time 

class WSHandler(tornado.websocket.WebSocketHandler): 

    def open(self): 
    print 'New connection was opened' 
    self.write_message("Conn!") 

    def on_message(self, message): 
    print 'Got :', message 
    self.write_message("Received: " + message) 


    def on_close(self): 
    print 'Conn closed...' 


application = tornado.web.Application([ 
    (r'/ws', WSHandler), 
]) 

if __name__ == "__main__": 
    http_server = tornado.httpserver.HTTPServer(application) 
    http_server.listen(65) 
    tornado.ioloop.IOLoop.instance().start() 

Ich möchte in der Lage sein eine Nachricht an alle angeschlossenen Clients zu senden, aber ich weiß nicht, und ich scheint das nirgendwo zu finden. Eine kleine Hilfe bitte? Danke

Antwort

10

Am ersten sollte man beginnen, eingehende Verbindungen manuell zu verwalten, das ist Ursache Tornado tun das nicht aus der Box. Als naive Implementierung Sie wie dies tun könnten:

class WSHandler(tornado.websocket.WebSocketHandler): 
    connections = set() 

    def open(self): 
    self.connections.add(self) 
    print 'New connection was opened' 
    self.write_message("Conn!") 

    def on_message(self, message): 
    print 'Got :', message 
    self.write_message("Received: " + message) 


    def on_close(self): 
    self.connections.remove(self) 
    print 'Conn closed...' 

so, wenn Sie gleiche Nachricht an alle Verbindungen benötigen, können Sie das tun:

[con.write_message('Hi!') for con in connections] 
+0

nicht vergessen, dass builtins nicht – deathangel908

+3

ist thread ich bin mit diesem Code Fehler gefunden. Die Korrektur lautet: '[con.write_message ('Hi!') Für con in self.connections]' – James

Verwandte Themen