【问题标题】:Backend-frontend two way communication前后端双向通信
【发布时间】:2013-03-02 04:08:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: rpc frontend backend


    【解决方案1】:

    有关一些可用方法的概述: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 过期。使用此频道向用户发送更新。

    【讨论】:

      猜你喜欢
      • 2013-10-16
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多