Tornado WebSocket与Django ORM共享会话

时间:2014-11-26 00:41:33

标签: python django asynchronous websocket tornado

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

  1. 在不同的端口上运行这两个进程,每当我需要访问Django函数时,我都会向其他端口发出asyncHTTPClient请求并获取数据但会导致django服务器的额外负载
  2. 在龙卷风服务器内运行Django并将django项目添加到virtualenv PYTHONPATH并直接使用Django函数但这会导致阻塞操作
  3. 那么合并这两个框架的最佳方法应该是什么,这样它们都可以很好地工作而不会有太多的变化和性能问题。

1 个答案:

答案 0 :(得分:4)

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

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

  • 大多数项目逻辑都在django项目中。龙卷风只会提供聊天手段
  • 如果你要从龙卷风访问数据库,那么你需要保持你的django模型和龙卷风模型的同步。此外,在龙卷风中,最好使用异步数据库驱动程序。所以,第一种方法可以避免这种痛苦。

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

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