Tornado: 在同一个IOLoop上支持多个应用程序

7
我想知道在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()

基本上我正在尝试构建我的Web应用程序,以便:
  1. 将功能应用程序分开
  2. 每个Web应用程序上可能有相同目的的多个处理程序(例如管理/监视等)

你需要两个语义上分离的“应用程序”有特定的原因吗? - Yuval Adam
这更多是一个功能需求而不是技术需求。基本上,我想在同一个Tornado容器(类似于Tomcat)上托管两个应用程序;但似乎这不是正确的模式。 - oDDsKooL
1个回答

9

简单来说,如果您将应用程序绑定到不同的端口:

...
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路由 - 任何涉及更改应用程序/请求处理的操作都将是一场灾难。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接