====== Tornado ======
===== Básico =====
* [[http://www.tornadoweb.org/en/stable/|Web del proyecto]]
* [[http://www.tornadoweb.org/en/branch2.4/overview.html|Overview]] y [[http://www.tornadoweb.org/en/branch2.4/documentation.html|Documentación]].
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
Una aplicación que utilice tornado se define a partir de unos patrones que indican la ruta y las clases que gestionarán peticiones a dichas rutas.
==== RequestHandler's ====
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("You requested the main page")
class StoryHandler(tornado.web.RequestHandler):
def get(self, story_id):
self.write("You requested the story " + story_id)
application = tornado.web.Application([
(r"/", MainHandler),
(r"/story/([0-9]+)", StoryHandler),
])
==== Cómo... ====
=== ... Instalar? ===
$ pip install tornado
=== ... Servir contenido estático? ===
application = tornado.web.Application([
(r'/(.*)', tornado.web.StaticFileHandler, {'path': '../static/'}),
(r'/(.*)', tornado.web.StaticFileHandler, {'path': '../static/index.html'})
])
class IndexHandler(tornado.web.RequestHandler):
def get(self, *args, **kwargs):
self.render('index.html')
=== ... Indicar que es debug y se muestre más info por consola? ===
Como argumento ''debug=True'' al constructor del objeto aplicación.
===== Notas =====
* {{:fw:tornado:tornado_zmq_websockets.zip|Estos apuntes}} explican cómo crear un websocket que publica a partir de datos recibidos por ZeroMQ. Fuentes:
* [[http://zeromq.github.io/pyzmq/eventloop.html]]
* [[https://learning-0mq-with-pyzmq.readthedocs.org/en/latest/pyzmq/multisocket/tornadoeventloop.html]].
* [[https://github.com/FZambia/tornado-zmq-sockjs-example]]