2013-03-13 188 views
2

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

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

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

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

回答

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到期。使用此频道发送用户更新。