【问题标题】:Tornado WebSocket with Django ORM with shared sessionTornado WebSocket 与 Django ORM 与共享会话
【发布时间】:2014-11-26 00:41:33
【问题描述】:

我正在创建一个带有聊天应用程序的 python 应用程序。聊天应用程序仅依赖于龙卷风。 但是聊天需要各种数据库访问,而 Django ORM 可以很好地做到这一点。我正在使用 tornado websockets 进行聊天。所以我有以下选择:

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

那么合并这两个框架的最佳方式应该是什么,这样它们才能在没有太多变化和性能问题的情况下运行良好。

【问题讨论】:

    标签: python django asynchronous websocket tornado


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-05-15
      • 2015-08-28
      • 2012-08-24
      • 2010-09-27
      • 1970-01-01
      • 2020-09-06
      • 1970-01-01
      • 2018-05-30
      • 2016-06-17
      相关资源
      最近更新 更多