【问题标题】:Deploy Django\Tornado on Heroku在 Heroku 上部署 Django\Tornado
【发布时间】:2014-09-12 14:53:29
【问题描述】:

我想在 Heroku 上部署一些应用程序,它是带有 Tornado(Tornadio2) 服务器的 Django,用于实现带有 socket.io 协议的 WebSockets。

所以,现在它在我的 VPS 服务器上运行良好, 我使用 Nginx 和 location 部分来路由 Django 或 Tornado 的请求。

Nginx 配置如下:

location /socket.io {
    # Tornado app
    proxy_pass http://localhost:8088;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    ...
}
location / {
    # Django app
    ...
}

那么,在 Heroku 上路由 Django/Tornado 请求的简单方法是什么?

看起来有必要使用自定义 Buildpack 来安装 Nginx?

或者可能有在 Django 中实现异步 socket.io 以避免路由请求的好方法?

【问题讨论】:

    标签: django heroku websocket socket.io tornado


    【解决方案1】:

    让我从你的最后一个问题开始:

    或者可能有在 Django 中实现异步 socket.io 以避免路由请求的好方法?

    Django 本质上是一个用于将 HTTP 请求处理为适当的 HTTP 响应的库。它不提供像 uWSGI、Apache mod_wsgi、Tornado、Flask、gunicorn 等这样的执行上下文。所以你不能真正使用 django 来服务 web 套接字; django 周围总会有一个执行上下文。

    当您将 django 站点部署到 Heroku 时,它通常会使用 gunicorn 作为执行环境。性能方面,这不是很酷:performance of python servers。因为gunicorn的性能差和阻塞I/O有关,所以有人在gunicorn前面安装了nginx作为非阻塞层。这导致了nginx buildpack

    我认为这不符合您的需求。 Nginx 是一个很棒的 Web 服务器,但不包含 python 执行环境。所以你最终会在你的堆栈中引入第三台服务器:

    • 用于 HTTP 的 nginx
    • django 的独角兽
    • 用于 websocket 的服务器 #3

    我最好的建议是离开 gunicorn 和 nginx,将所有东西放在 Tornado 中:web 服务器、django 的 WSGI 执行上下文、websockets 的异步上下文。

    此链接显示如何run Tornado on Heroku。下一个链接显示如何run django in Tornado

    【讨论】:

      猜你喜欢
      • 2017-06-24
      • 1970-01-01
      • 2013-07-05
      • 2017-05-06
      • 2020-07-11
      • 2021-07-30
      • 1970-01-01
      • 2013-01-12
      • 2015-03-28
      相关资源
      最近更新 更多