在django实时通知/聊天

时间:2014-11-14 12:43:53

标签: django websocket

我现在正在制作一个django网站,我希望实现像facebook或SE上的实时通知功能。

我做了一些研究,看起来虽然有两种选择:ajax长轮询和websockets,后者是要走的路。

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

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

3 个答案:

答案 0 :(得分:12)

Django本身是以阻塞方式构建的,即使用同步方法。所以,你不能使用django app打开持久websocket,因为它会阻止整个django线程。

如果您想在django项目环境中启用通知/聊天,我建议使用centrifuge。它是用python编写的,但使用了异步(非阻塞)框架:tornado

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

简化工作流程,请查看docs了解详情:

  1. 在同一台服务器上启动centrifuge,与django项目一样(或在另一台服务器上,但它们之间的延迟较低)
  2. 您的前端将使用离心机打开websocket,而不是使用django项目。
  3. 当您需要发送通知时,通过REST api将其发送到django的离心机,离心机将其发送给需要的客户!
  4. 我已经尝试过了,它有效!

答案 1 :(得分:0)

Django没有提供你想要的开箱即用的东西。您必须使用第三方库。跨框架工作的是Pusher

答案 2 :(得分:0)

我认为你必须选择Firebase它会给你很棒的同步以及你如何在前端使用聊天,所以它不需要对django环境做任何事情,所以你可以在回调中异步更新你的后端与firbase。使用AngularJS的firebase也为你提供了非常棒的三向绑定。