在 gunicorn 和 Tornado 上使用 Django 项目

Posted

技术标签:

【中文标题】在 gunicorn 和 Tornado 上使用 Django 项目【英文标题】:Working with Django Project on gunicorn and Tornado 【发布时间】:2015-02-14 02:45:08 【问题描述】:

我有一个django 项目在gunicorn server 上运行,位于nginx proxy 后面。

我想为这个项目添加实时聊天功能,为此我正在考虑使用Tornado websocket API。 但问题是,聊天消息需要由 Django 用户验证为request.is_authenticated()。同样,我需要使用两个 Django 模型来处理龙卷风中的聊天。我无法弄清楚如何处理这种情况,让 gunicorn 和 tornado 服务器保持不同。

我考虑了几个选项: 1. 在 gunicorn 服务器上创建一个专用 API,用于监听来自 tornado 服务器的特殊消息。可以这样做,但 gunicorn 服务器会产生额外的开销 2.会话认证可以通过gunicorn服务器作为API完成,其余的数据库处理可以在tornado本身上完成。

有没有更好的方法来处理这个问题?无需创建 API 并无缝集成它们?

【问题讨论】:

【参考方案1】:

可以在 tornado 而不是 gunicorn 上运行您的 Django 应用程序(请参阅https://github.com/bdarnell/django-tornado-demo)。这不是性能的最佳选择,但可以让 django 和 tornado 应用程序交互而无需构建单独的 API。

我个人建议在同一进程中运行 django 和 tornado,仅作为过渡到 100% tornado 的垫脚石。如果您打算保留 django 服务器,那么最好只构建一个可以从 tornado 调用的身份验证 API。

【讨论】:

谢谢,但是在 tornado 上运行 django 时,我遇到了 django 用户的问题。我无法验证请求并从 tornado WebSocketHandler 获取 django 用户。我从“gist.github.com/bdarnell/654157”尝试了您的代码,但它不适用于 django 1.5 :( 是的,很遗憾我已经很多年没有接触过 django,所以我无法帮助你。

以上是关于在 gunicorn 和 Tornado 上使用 Django 项目的主要内容,如果未能解决你的问题,请参考以下文章

WSGI协议

使用Nginx + Gunicorn + Django 方式部署django程序

Flask 可以使用 Tornado Server 的异步功能吗? [复制]

gunicorn部署Flask服务

gunicorn部署Flask服务

用python做web开发,tornado 如何部署,都是用nginx+supervisor吗