2014-06-17 73 views
0

我已經使用web-sockets編寫了一個簡單的龍捲風應用程序來管理守護程序(就像傳輸網絡接口一樣)。困擾我的一件事是執行狀態更新。 我的WebSocketHandler只接收來自客戶端的消息,執行必要的操作,檢查狀態並將其發送給客戶端。它不會在沒有請求的情況下向客戶端發送狀態使用Tornado向客戶端發送間歇性更新

class WebSocketHandler(tornado.websocket.WebSocketHandler): 

    def open(self): 
     print('connected') 
     self.daemon = Daemon() 
     self.write_message(self.daemon.get_status()) 

    def on_message(self, message): 
     if message == 'start': 
      self.daemon.start() 
     elif message == 'stop': 
      self.daemon.stop() 
     self.write_message(self.daemon.get_status()) 

    def on_close(self): 
     print('disconnected') 

我使用JavaScript的setInterval函數在客戶端請求的狀態更新,就像這樣:

 ws = new WebSocket("ws://localhost:8080/websocket"); 

     ws.onopen = function() { 
      setInterval(function() { 
      if (ws.bufferedAmount == 0) 
       ws.send('status'); 
      }, 1000); 
     }; 
    } 

如何同樣的結果可以在服務器端實現,讓龍捲風發出電流狀態到客戶端沒有阻止on_message方法?

回答

3

您可以使用tornado.ioloop.IOLoop.add_timeout調用一個方法的每秒X個更新客戶端:

from tornado.ioloop import IOLoop 
from datetime import timedelta 

class WebSocketHandler(tornado.websocket.WebSocketHandler): 

    def open(self): 
     print('connected') 
     self.daemon = Daemon() 
     self.write_message(self.daemon.get_status()) 
     self.schedule_update() 

    def schedule_update(self): 
     self.timeout = IOLoop.instance().add_timeout(timedelta(seconds=5), 
                self.update_client) 
    def update_client(self): 
     try: 
      self.write_message(self.daemon.get_status()) 
     finally: 
      self.schedule_update() 

    def on_close(self): 
     IOLoop.instance().remove_timeout(self.timeout) 
     print('disconnected') 
+0

謝謝你,這是完全,我一直在尋找。 – eyeinthebrick

相關問題