Django Channels 2.x 还是 Ajax?

Posted

技术标签:

【中文标题】Django Channels 2.x 还是 Ajax?【英文标题】:Django Channels 2.x or Ajax? 【发布时间】:2020-05-26 06:28:02 【问题描述】:

我有一个 jQuery 数据表,其中包含大量数据(10000+ 行),可以从很多用户那里实时使用/更新,我需要该表一直被刷新和更新。我已经尝试在 1 秒内使用 Ajax 调用,但我认为这并不好,因为每个用户每秒都在发送 Ajax 请求 * 50 或更多用户,我认为必须有更好的解决方案。我一直在考虑使用 Django Channels 或类似的东西(?),我想知道这可能吗?基本上我需要在模型(数据库)上设置某种监听器,并在更改时提取新数据(几乎每秒)。我很想听听比我有更多经验的人的意见。先感谢您。

附言。我被告知为此使用网络套接字。

【问题讨论】:

【参考方案1】:

简而言之,网络套接字将是执行此操作的建议方式。

如果您需要订阅的模型的所有更新都是通过 Django 的 ORM 进行的。

我建议考虑使用(或受其启发)DjangoChannelsRestFramework 作为订阅数据库中多个模型的起点。

这个库被设置为让你通过一个网络套接字连接订阅多个对象类型,并在对象发生变化时获取 ws 消息。它还提供了一些工具,让您可以通过 Web 套接字重用现有的 DRF 视图。

免责声明:我是 DjangoChannelsRestFramework 的作者。

【讨论】:

好吧,我还没有使用 DRF。所以我想,Channels 是一个很好的开始方式吗? 是的,只要所有数据库更新都发生在您的服务器上下文中,频道应该是一个很好的解决方案。 (以便可以通知网络套接字上的订阅者)

以上是关于Django Channels 2.x 还是 Ajax?的主要内容,如果未能解决你的问题,请参考以下文章

django 频道 channels.exceptions.Channels Full

Django Channels 是不是使用 ws:// 协议前缀在 Django 视图或 Channels 应用程序之间进行路由?

Django使用Channels实现WebSocket--下篇

Django Channels 测试失败

Django 通道 websocket 连接和断开连接(Nginx + Daphne + Django + Channels)

Django-channels:AttributeError:'str'对象没有属性'profile'