后端 - 前端双向通信

时间:2013-03-13 23:39:27

标签: rpc frontend backend

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

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

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

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

1 个答案:

答案 0 :(得分:3)

有关可用方法的概述:What are Long-Polling, Websockets, Server-Sent Events (SSE) and 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库(Socket.IO Client Library in Python)。

如果您需要身份验证,当用户登录时,请让前端发送新的websockets频道名称请求,然后保持该频道开放,直到他们退出或其Cookie过期为止。使用此频道发送用户更新。