在Heroku上部署Django \ Tornado

时间:2014-07-21 23:06:21

标签: django heroku websocket socket.io tornado

我想在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中实现async socket.io以避免路由请求?

1 个答案:

答案 0 :(得分:0)

让我先谈谈你的上一个问题:

  

或者可能有很好的方法在Django中实现async 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有关,所以有些人将nginx安装为gunicorn前面的非阻塞层。这导致了nginx buildpack

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

  • nginx for HTTP
  • gunjorn for django
  • websockets的服务器#3

我最好的建议是离开gunicorn和nginx并将所有内容整合到Tornado中:web服务器,django的WSGI执行上下文,websockets的异步上下文。

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