7

我想知道是否可以在Tornado框架中在同一个 IOLoop 上注册多个应用程序?

就像是

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()

基本上我正在尝试构建我的网络应用程序,以便:

  1. 功能应用程序是分开的
  2. 每个 webapp 上可以有多个具有相同目的的处理程序(例如管理/监控/等)
4

1 回答 1

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 路由 - 任何涉及弄乱应用程序/请求处理的事情都将成为一个受伤的世界。

于 2012-06-07T15:49:21.540 回答