Tornado WebSocket与Django ORM共享会话

Dhe*_*dra 6 python django asynchronous tornado websocket

我正在创建一个带聊天应用程序的python应用程序.聊天应用程序仅依赖于龙卷风.但聊天需要各种数据库访问,Django ORM做得很漂亮.我正在使用龙卷风websockets进行聊天.所以我有以下选择:

  1. 在不同的端口上运行这两个进程,每当我需要访问Django函数时,我都会向其他端口发出asyncHTTPClient请求并获取数据,但会给django服务器带来额外的负载
  2. 在龙卷风服务器内运行Django并将django项目添加到virtualenv PYTHONPATH并直接使用Django函数,但这会导致阻塞操作

那么合并这两个框架的最佳方法应该是什么,这样它们都可以很好地工作,而不会有太多的变化和性能问题.

sta*_*alk 4

这取决于您需要从tornado进程访问Django函数的次数。如果此类访问计数较低,则第一种方法更好。如果很大,则选择第二个。

但我会尝试实施第一种方法,因为:

  • 大部分项目逻辑将在 django 项目中。Tornado 只会提供聊天的方式
  • 如果您将从tornado 访问数据库,那么您需要保持django 模型和tornado 模型同步。另外,在tornado中最好使用异步数据库驱动程序。因此,第一种方法将避免这种痛苦。

在我看来,最好在 django 端和tornado 端实现一些 REST API,并且这些进程将通过此 API 相互通信。尝试以这样的方式设计您的架构,即您需要尽可能少地使用此 API。

我建议检查(甚至可能使用)名为离心机的项目。它建立在龙卷风之上,提供了实现实时消息的方法。它有 REST api,因此您可以从任何其他进程控制它。在这个答案中描述了 django+centrifuge 工作流程:/sf/answers/1885137411/