【问题标题】:How to integrate django app with tcp server如何将 django 应用程序与 tcp 服务器集成
【发布时间】:2018-07-09 19:27:58
【问题描述】:

有没有办法连接 django 和使用 asyncio 构建的 tcp 服务器?

我有一个应该与客户端保持长期连接的 TCP 服务器,但我想将它与 Django 集成,以便用户可以根据来自 Django 的表单通过 TCP 服务器发送数据

  • 听说过芹菜,不知道是否适合这个应用
  • 我目前的想法是在接收帖子的django代码中放置一个临时tcp客户端,并让它向tcp服务器发送数据。我不希望这样做,因为我必须向 TCP 服务器添加更多特殊情况,以便识别数据是从 Django 而不是它的其他客户端之一发送的

【问题讨论】:

  • 检查Django Channels。另外,请记住,如果您可以使用它们,则有一些标准(如 websockets)可用于持久连接。
  • 很有趣,但我不确定 Django Channels 是否非常适合这个问题,因为它是针对 websockets 的。使用 websockets 在 TCP 服务器和 Django 服务器之间进行通信会引入另一个级别的复杂性。重新利用 django 通道来使用 TCP 似乎也很复杂
  • 我很确定 Tornado 会为你做到这一点,我不是 100% 确定
  • @DiegoVinícius,我已经看到了这个选项,但是 TCP 服务器已经在 asyncio 中创建并使用了 Tornado 中似乎不存在的一些 asyncio 功能
  • 您使用您的 django 表单并传播您调用 TCP 服务器的请求(在您的视图中),这样每当您收到新的表单请求时,您的 TCP 服务器都会收到它......没有内置-我现在想到了

标签: django python-asyncio


【解决方案1】:

试试aiohttp-wsgi。它在aiohttp 之上为asyncio 提供了一个WSGI 桥接器,因此您可以在异步进程中处理Django 请求。

请注意,当使用 Django 作为 Web 框架时,模型实例的生命周期通常不是问题,因为对象的生命周期与创建它们的视图一样长。当使用 Django 作为服务时(在 Django HTTP 请求之外),这不会发生,您需要仔细同步对模型实例的访问。这包括避免使用缓存/旧实例进行修改,并在其他进程(即 Django 视图或其他服务代码)可能更改它们时刷新模型对象。 Django CRM 不保证代表相同数据库记录的模型对象的唯一性。

【讨论】:

  • 我不知道为什么这被否决了,这似乎是一个可行的解决方案。不过,我将把这个问题说得更久一些,因为没有出现任何看起来像一个干净的解决方案的问题。现在我将 TCP 客户端放在 post 处理程序中,但如果没有其他问题,我想我会迁移到这里
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 2020-01-22
相关资源
最近更新 更多