2013-08-30 6 views
9

Mam ten prosty kod na serwerze websocket:pyton tornado wysłać wiadomość do wszystkich połączeń

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

Chcę, aby móc wysłać wiadomość do wszystkich podłączonych klientów, ale nie wiem, a ja wydaje się, że nigdzie tego nie ma. Potrzebujesz pomocy? Dzięki

Odpowiedz

10

Na początku należy ręcznie zarządzać połączeniami przychodzącymi, to dlatego, że tornado nie robi tego z pudełka. Jako naiwny realizacja można zrobić tak:

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...' 

więc jeśli trzeba tę samą wiadomość do wszystkich połączeń można to zrobić:

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

nie zapominać, że builtins nie wątkowo – deathangel908

+3

byłem napotkanie błędów za pomocą tego kodu. Poprawka jest następująca: '[con.write_message ('Hi!') Dla con w self.connections]' – James