django 中的实时通知/聊天

2024-04-16

我现在正在用 django 制作一个网站,我想实现一个实时通知功能,就像 facebook 或 SE 上的那样。

我做了一些研究,似乎虽然有两种选择:ajax 长轮询和 websockets,但后者是最佳选择。

然而,正如你所知,websocket 'socket.io' 的 go to 插件原来是一个 node.js 插件,而 django 端口似乎只支持 python 2,而且该项目似乎已经死了。我使用 python 2.7 作为我的项目解释器,但我想证明自己未来的能力,这样如果我以后升级到 python3,我不会发现自己无法使用此功能。

所以我的问题是这样的: 是否有一种直接且未来可用的方法来实现 websocket,它将用于在 django env 中发送实时通知和聊天?


Django 本身是以阻塞方式构建的,即同步方法。那么你cannot使用 django 应用程序打开持久的 websocket,因为它会阻塞整个 django 线程。

如果你想在 django 项目环境中启用通知/聊天,我建议使用离心机 https://github.com/centrifugal/centrifuge。它是用Python编写的,但是使用了异步(非阻塞)框架:tornado http://www.tornadoweb.org/en/stable/.

但是,您甚至不需要知道它是如何工作的,因为它提供了简单的 REST api 来与之通信。

简化工作流程,检查docs https://centrifuge.readthedocs.org/en/latest/更多细节:

  1. Start centrifuge在与您的 django 项目相同的服务器上(或在另一个服务器上,但它们之间的延迟较低)
  2. 你的前端将使用离心机打开 websocket,而不是使用 django 项目。
  3. 当您需要发送通知时,通过 REST api 从 django 将其发送到离心机,离心机将其发送给需要的客户端!

我已经尝试过并且有效!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django 中的实时通知/聊天 的相关文章

随机推荐