Tornado WebSocket 与 Django ORM 与共享会话
Posted
技术标签:
【中文标题】Tornado WebSocket 与 Django ORM 与共享会话【英文标题】:Tornado WebSocket with Django ORM with shared session 【发布时间】:2014-11-26 00:41:33 【问题描述】:我正在创建一个带有聊天应用程序的 python 应用程序。聊天应用程序仅依赖于龙卷风。 但是聊天需要各种数据库访问,而 Django ORM 可以很好地做到这一点。我正在使用 tornado websockets 进行聊天。所以我有以下选择:
-
在不同的端口上运行这两个进程,每当我需要访问 Django 函数时,我都会向其他端口发出 asyncHTTPClient 请求并获取数据,但会给 django 服务器带来额外的负载
在 tornado 服务器中运行 Django 并将 django 项目添加到 virtualenv PYTHONPATH 并直接使用 Django 函数,但这会导致操作阻塞
那么合并这两个框架的最佳方式应该是什么,这样它们才能在没有太多变化和性能问题的情况下运行良好。
【问题讨论】:
【参考方案1】:这取决于您需要从 tornado 进程访问 Django 函数的次数。如果这样的访问计数很低,那么第一种方法会更好。如果大,则选择第二个。
但我会尝试实施第一种方法,因为:
大部分项目逻辑将在 django 项目中。 Tornado 只会提供聊天的方式 如果您将从 tornado 访问数据库,那么您需要使您的 django 模型和您的 tornado 模型保持同步。此外,在龙卷风中最好使用异步数据库驱动程序。因此,第一种方法可以避免这种痛苦。在我看来,最好在 django 端和 tornado 端实现一些 REST API,这些进程将通过这个 API 相互通信。尝试以这样一种方式设计您的架构,即您需要尽可能少地使用此 API。
我建议检查(或者甚至使用)名为 centrifuge 的项目。它建立在 tornado 之上,它提供了实现实时消息的方法。它具有 REST api,因此您可以从任何其他进程控制它。在这个答案中描述了 django+centrifuge 工作流程:https://***.com/a/26930534/821594
【讨论】:
以上是关于Tornado WebSocket 与 Django ORM 与共享会话的主要内容,如果未能解决你的问题,请参考以下文章
WebSocket Handler on_close 方法 async 实现tornado
Tornado-第三篇-tornado支持websocket协议