Поддержание вызова ajax при вызове сервера Tornado

1

Я пытаюсь написать свое первое приложение для торнадо.
Пример примера для торнадо показывает приведенный ниже код , однако кажется, что как только функция "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()  

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

Теги:
tornado
nonblocking
comet

1 ответ

3
Лучший ответ

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

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),
])
  • 0
    Благодарю. Это помогло большое время. Я нашел демо чата в документации и вижу в нем долгий опрос. Веб-сокеты кажутся великолепными.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню