后端-前端双向通信

use*_*786 2 frontend rpc backend

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

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

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

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

Ani*_*tla 5

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

由于您需要能够在不让客户端不断轮询的情况下向前端传达更新,因此听起来您需要设置网络套接字或服务器发送事件,并且对于遗留系统长轮询或其他方法(也许尝试像这样的服务) Pusher.io(如果需要扩展这些东西)。有许多关于将这些项目集成到 Flask 或 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 Client Library )。

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