Поддержание вызова ajax при вызове сервера Tornado - PullRequest
1 голос
/ 05 мая 2011

Я пытаюсь написать свое первое приложение торнадо.
В примере примера торнадо показан код ниже , однако кажется, что, как только возвращается функция "MainHandler", соединение между клиентом и этимсервер будет потерян.

Я хочу, чтобы сервер непрерывно отправлял данные по мере их поступления.
Как сохранить этот канал открытым?

На клиентесторона, я думаю сделать вызов ajax.Будет ли это работать?
Я думал, что как только данные будут получены, вызов ajax заканчивается.

Facebook действительно говорит, что клиент держит поток открытым на сервере, используя торнадо, поэтому я знаю, что это можно сделать, я думаю, что я борюсь с какой-то простой концепцией здесь ..

import tornado.ioloop  
import tornado.web  
import time

class MainHandler(tornado.web.RequestHandler):  
    def get(self):  
        self.write("What happens after this call ?")  
    # while(True): time.sleep(5) <push more data># This would be ugly.. plus blocking(correct ?) 

application = tornado.web.Application([  
    (r"/", MainHandler),  
])

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

Чего не хватает в моем понимании?

1 Ответ

3 голосов
/ 05 мая 2011

Возможно, вы захотите использовать веб-сокет, если хотите сохранить соединение открытым.Что-то вроде:

LISTENERS = []

class RealtimeHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        LISTENERS.append(self)

    def on_close(self):
        LISTENERS.remove(self)

application = tornado.web.Application([
    (r'/', RealtimeHandler),
])
...