2013-08-30 4 views
9

ho questo semplice codice per un server websocket:pitone tornado inviare un messaggio a tutti i collegamenti

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

Voglio essere in grado di inviare un messaggio a tutti i client connessi, ma io non lo so, e ho non sembra trovarlo da nessuna parte. Un piccolo aiuto per favore? Grazie

risposta

10

Al primo si dovrebbe iniziare a gestire le connessioni in entrata manualmente, perché il tornado non lo fa dalla scatola. Come ingenuo realizzazione si potrebbe fare in questo modo:

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

quindi se avete bisogno stesso messaggio a tutti i collegamenti si può fare:

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

non dimenticate che i comandi incorporati non sono threadsafe – deathangel908

+3

Sono stato incontrando errori con questo codice. La correzione è: '[con.write_message ('Hi!') Per con con in self.connections]' – James