Django信号与渠道

时间:2018-07-06 06:57:36

标签: python django django-signals django-channels

我有一个要实时进行的基于Django的项目,因此想到了Django通道。但是,我仍然不确定这是否是应用Django通道的正确项目,以及我应该应用它的项目的哪一部分。

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

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

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

我的问题

1)在此示例中,我应该在哪里实现Django通道?

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

2)Django信号与Django通道-重叠吗?

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

在此先感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

我已经实现了与Django类似的功能。这里要点:

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

与前端的WebSockets一起使用时,频道效果最好。一开始可能很难建立一个完整的生产设置,但是最终结果通常对于以现代交互方式进行实时浏览器内通知来说是非常好的(即:无页面刷新