Tornado:在同一个IOLoop上支持多个Application

时间:2012-06-07 15:24:42

标签: python web-applications tornado

我想知道Tornado框架中是否有可能在同一个IOLoop上注册多个Application

这样的东西
application1 = web.Application([
    (r"/", MainPageHandler),
])
http_server = httpserver.HTTPServer(application1)
http_server.listen(8080)

application2 = web.Application([
    (r"/appli2", MainPageHandler2),
])
http_server2 = httpserver.HTTPServer(application2)
http_server2.listen(8080)

ioloop.IOLoop.instance().start()

基本上我正在尝试构建我的webapp以便:

  1. 功能应用程序是分开的
  2. 每个webapp上都有相同目的的多个处理程序(例如admin / monitoring / etc)

1 个答案:

答案 0 :(得分:10)

简单的一点是,如果要将应用程序绑定到不同的端口:

...
http_server = httpserver.HTTPServer(application1)
http_server.listen(8080)    # NOTE - port 8080

...
http_server2 = httpserver.HTTPServer(application2)
http_server2.listen(8081)   # NOTE - port 8081

ioloop.IOLoop.instance().start()

这是Tornado变得简单的基本案例。挑战在于,通过在URI级别路由到应用程序,您将跨越设计边界,即每个应用程序负责其请求的所有URI。

如果他们真的需要在URI级别而不是端口上进行服务,那么最好在不同的端口上托管不同的应用程序并让Nginx / Apache执行URI路由 - 任何涉及搞乱应用程序/请求处理的事情将是一个受伤的世界。