2

我们目前有一个 django 应用程序通过 Apache 为用户提供我们的前端网站。前端查询我们的后端,这是一个单独的 Python 应用程序 (Flask),服务于不同的服务器。到目前为止,前端需要向后端查询数据,而不是反过来。

我们现在引入数据警报,用户可以选择接收有关系统中数据更改的信息。检查是否发生警报的过程必须发生在后端,因为它与数据模型紧密耦合。因此,前端发送请求以在后端添加警报,然后后端将轮询并检查是否发生了触发器。

问题是,一旦在后端触发警报,前端需要得到通知,以便用户也可以得到通知。后端无法直接提醒用户,因为它不知道电子邮件等用户数据(此用户数据可能会更改,因此将其与添加警报的请求一起发送到后端过于简单)。

因此,我们正在寻找将警报通知从后端推送到前端的最佳方式。我们这样做的最佳方法是什么?我们可以在 django 应用程序上设置一个后端可以查询的视图,但我不喜欢前端查询后端的想法以及相反的方式。实现这一目标的最佳选择是什么?

4

1 回答 1

4

有关一些可用方法的概述:什么是长轮询、Websockets、服务器发送事件 (SSE) 和 Comet?.

由于您需要能够在不让客户端不断轮询的情况下与前端通信更新,因此听起来您需要设置 Web 套接字或服务器发送的事件,并且对于遗留系统长轮询或其他方法(也许尝试类似的服务pusher.io 如果需要缩放这些东西)。有许多关于将这些项目集成到烧瓶或 django 设置中的很棒的教程。这里有一些很棒的教程:http ://blog.jupo.org/2011/08/13/real-time-web-apps-with-django-and-websockets/和http://dev.hasenj.org/post /38188152502

为了让一个最小的解决方案启动并运行,我建议给 socket.io 看一下(http://socket.io/),然后使用 python 库(Python 中的 Socket.IO 客户端库)。

如果您需要身份验证,当用户登录时,让前端发送一个新的 websockets 通道名称的请求,然后保持该通道打开,直到他们注销或他们的 cookie 过期。使用此频道向用户发送更新。

于 2013-03-20T23:41:26.917 回答