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