我想在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以避免路由请求?
答案 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执行环境。因此,您最终会在堆栈中引入第三台服务器:
我最好的建议是离开gunicorn和nginx并将所有内容整合到Tornado中:web服务器,django的WSGI执行上下文,websockets的异步上下文。
此链接显示如何run Tornado on Heroku。下一个链接显示了如何run django in Tornado。