在Heroku上部署DjangoTornado



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

所以,现在它在我的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中使用io来避免路由请求?

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

或者可能有很好的方法实现异步套接字。在Django中使用io来避免路由请求?

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

当你将django站点部署到Heroku时,它通常会使用gunicorn作为执行环境。性能方面,这不是很酷:python服务器的性能。由于gunicorn的性能差与阻塞I/O有关,有些人在gunicorn前面安装nginx作为非阻塞层。这导致了nginx的构建包。

我认为这个不适合你的需要。Nginx是一个很棒的web服务器,但不包含python执行环境。所以你最终会在堆栈中引入第三个服务器:
    nginx for HTTP django的gunicorn
  • server #3 for websockets

我最好的建议是离开gunicorn和nginx,把所有的东西都放在Tornado中:web server, django的WSGI执行上下文,websockets的async上下文。

这个链接展示了如何在Heroku上运行Tornado。下一个链接展示了如何在Tornado中运行django。

相关内容

  • 没有找到相关文章