2014-03-05 70 views
0

我可以實現「長連接(持續連接,不是長輪詢)」使用tornado.web.RequestHandler?因爲我需要包含連接,所以我需要接收由客戶端發送的「心臟消息」,所以,如果tornado.web.RequestHandler可以做到,我該怎麼辦?並有一些這樣的演示?龍捲風長連接

謝謝!

回答

2

RequestHandler不正確,請使用WebSocketHandler。下面是一個示例應用程序,每秒接收來自每個客戶端的心跳:

import tornado.ioloop 
import tornado.web 
import tornado.websocket 


class HeartBeatReceiver(tornado.websocket.WebSocketHandler): 
    def open(self): 
     pass 

    def on_message(self, message): 
     print message 

    def on_close(self): 
     pass 


class Main(tornado.web.RequestHandler): 
    def get(self): 
     # This could be a template, too. 
     self.write(''' 
<script> 
function sendHeartBeat() { 
    ws.send("heartbeat"); 
    setTimeout(sendHeartBeat, 1000); 
} 

ws = new WebSocket("ws://localhost:8888/websocket"); 
ws.onopen = sendHeartBeat; 
</script>''') 


application = tornado.web.Application([ 
    (r"/", Main), 
    (r"/websocket", HeartBeatReceiver), 
]) 

if __name__ == "__main__": 
    application.listen(8888) 
    tornado.ioloop.IOLoop.instance().start()