2013-08-30 72 views
9

我有一個WebSocket的服務器這個簡單的代碼:蟒蛇龍捲風將消息發送到所有連接

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

我希望能夠將消息發送給所有連接的客戶端,但我不知道,我似乎沒有在任何地方發現。請幫助一下?謝謝

回答

10

首先你應該開始管理傳入連接manualy,這是因爲龍捲風不會從框中做到這一點。作爲幼稚的做法,你可以這樣做:

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

所以如果你需要同樣的消息到所有連接,你可以這樣做:

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

不要忘記,建宏是不是線程安全的 – deathangel908

+3

我已經遇到此代碼的錯誤。更正爲: '[con.write_message('Hi!')for con in self.connections]' – James