Почему Tornado не может обнаружить закрытое соединение с IE - PullRequest
3 голосов
/ 24 августа 2011

Я пытаюсь реализовать "Длинный опрос" по Торнадо + Jquery.Проблема в том, что: после установления опроса я закрываю IE (не другой браузер), соединение остается живым, и программа продолжает работать, пока не достигнет моего состояния выхода.

server

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

Client:

$.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 () превратится в ИСТИНА, возвращенную проблему, но для IE это всегда Ложь.Таким образом, если пользователь переключается между двумя страницами (используя длительный опрос), ресурсы сервера быстро истощаются, и каждый щелчок будет зависать до завершения одного из опросов.Зачем?и как совать это.Помогите!Помогите!Т_Т

...