2014-03-05 71 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()