【问题标题】:Django signals vs channelsDjango 信号与通道
【发布时间】:2018-12-14 17:22:13
【问题描述】:

我有一个基于 Django 的项目,我想实时制作,所以我想到了 Django 频道。但是,我仍然不确定这是否是应用 Django 频道的正确项目,以及我应该在项目的哪个部分应用它。

我有一堆传感器不断读取数据并将它们保存/更新到后端的数据库中。然后将数据库中的数据传递到前端,显示在网页上。

数据流:传感器 > 网关 > 数据库 > 后端 > 前端

我已经实现了 Django 信号来持续监听后端数据库的任何更新,以便在前端向用户执行一些通知功能。

我的问题

1) 在这个例子中,我应该在哪里实现 Django 通道?

  • 从传感器到网关
  • 从网关到数据库
  • 从数据库到后端
  • 从后端到前端
  • 以上所有内容

2) Django 信号与 Django 通道——重叠?

当 Django 信号监听数据库更新时,感觉就像是在实时完成它的工作。当它通知我有更新时,我只需调用我的一堆代码来执行我想要的一些通知。这不是已经实时了吗?我应该还是应该在这里使用 Django 频道?

提前感谢您的帮助!

【问题讨论】:

  • 使用 Django 频道,您想在信号触发后更新前端或在信号触发后创建一些业务逻辑。

标签: python django django-signals django-channels


【解决方案1】:

我已经用 Django 实现了类似的东西。这里的要点:

  1. 传感器通过 REST API(使用 DRF)向 Django 发送新数据;
  2. Django 处理数据。使用Celery实现大量计算,而不是使用信号,快速关闭与客户端的连接;
  3. 然后 Celery 使用处理后的数据更新数据库,并使用 Channels 通知前端的客户端。

Channels 在前端与WebSockets 一起使用时效果最佳。一开始可能很难有一个完整的工作生产设置,但最终结果通常非常适合以现代和交互式方式进行实时浏览器内通知(即:无页面刷新) .

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 2018-03-18
    • 2012-04-28
    • 1970-01-01
    • 2020-04-23
    • 2018-05-30
    相关资源
    最近更新 更多