为什么Tornado无法检测到IE关闭的连接

时间:2011-08-24 05:51:13

标签: jquery ajax tornado long-polling

我尝试通过Tornado + Jquery实现“Long polling”。有一个问题是:在建立轮询后,我关闭IE(而不是其他浏览器)连接仍处于活动状态,程序继续运行直到达到退出状态。

服务器

class Poll(BaseHandler):
    @tornado.web.asynchronous    
    def post(self):   
        self.get_data(callback=self.async_callback(self.on_finish))  
        print("Exiting from async.")    

    def get_data(self, callback,t=30):
        data={}
        data["t"]=datetime.datetime.now()
        if self.request.connection.stream.closed():
            print "Connection closed"
            return  
        if t: 
            tornado.ioloop.IOLoop.instance().add_timeout(time.time() + 2, lambda: self.get_data(callback, t-1)) 
        else: 
            callback(data) 

    def on_finish(self,data):
        self.write(json.dumps(data))
        self.finish()

客户端:

$.ajax({url: "/poll",                 
    type: "POST",                 
    dataType: "json",
    async:true,
    success: function(data){
        alert(data)    
        interval = window.setTimeout(ldy.poll, 0);
    }
});  

如果我使用FF或Chrome。当我关闭浏览器时, self.request.connection.stream.closed()将变为TRUE,但是对于IE,它始终为False。因此,如果用户在两个页面之间切换(使用长轮询),服务器的资源将很快耗尽,并且每次单击都将挂起,直到一个轮询退出。 为什么?以及如何解决它。救命!救命! T_T

0 个答案:

没有答案