【问题标题】:Sending notification to the user on database change向用户发送有关数据库更改的通知
【发布时间】:2011-07-28 03:12:27
【问题描述】:

我正在构建一个自助餐厅管理系统,其中有两种类型的用户:顾客和柜台所有者。

对于自助餐厅提供的每道菜,都有一个与之关联的唯一的 disc.id。

到现在为止,我有类似学生的东西向更新“订单表”(以 PK 作为 id)的 URL 发送带有菜、id 和柜台编号的 POST 请求。当菜准备好时,柜台所有者按“准备”按钮。

此时,我希望其订单在准备好的商品旁边的客户收到“您的订单准备正在进行中”的通知。

我该怎么做? 一种方法是简单地创建一个视图,其参数为 customer.id 和状态,并以 True 或 Flase 回复。如果我收到 True,我可以简单地轮询 URL 并提供通知。

但是,我觉得轮询不是更好的方法,因为会有这么多客户登录,每个人都会向服务器进行轮询,这是不可接受的。 有更好的方法吗?

【问题讨论】:

  • 轮询(1 个 HTTP 请求)与整页回传(10+?)对我来说看起来不错。脸书做到了。你能想象它有多少用户吗?

标签: jquery ajax django notifications


【解决方案1】:

由于我们无法通过 http 推送数据,我认为轮询是唯一的选择。

您可以使用 ajax 请求进行轮询,它也可以用于更新其他一些统计信息(如果有的话)以使其更具交互性:)

【讨论】:

  • 有一个通过互联网推送的选项。看看 stacoferflow 代码本身......问怎么做:)
  • 我说的是将数据从 Web 服务器推送到客户端(浏览器)而不是其他方式。
  • 这些是在理论上不支持原生推送的协议上实现推送效果的一些机制,不是吗?我们可以说http“支持”推送吗?我不这么认为。这就是为什么谷歌正在试验 chromium.org/spdy 。 HTTP 是完全由客户端发起的请求协议
【解决方案2】:

不重复轮询的“推送”最简单的方法是“long polling”,客户端启动请求并在可用时立即获得答案。无论如何,您都必须使用可扩展性良好的服务器,但至少不会一直受到锤击。

服务器推送有更好但更复杂的方法,请查看我上面链接的文章。

【讨论】:

    【解决方案3】:

    我不知道你是否理解正确,但我认为你应该使用 websockets

     http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/ 
    

    【讨论】:

      【解决方案4】:

      这真的取决于你真正需要什么。

      如果通知可以作为用户活动的一部分发送,只需添加一条用户消息,每当用户在页面上执行操作时就会显示该消息。 django.contrib.messages 加上你的主 html 模板中的几行就可以了。

      但如果您希望通知是交互式的 - 您可以使用 few PUSH options 之一

      有趣的链接:

      在服务器端,可用的选项很少,最简单的是Green Unicorn。使用它可以让您打开数千个连接并由少数进程管理。

      【讨论】:

        【解决方案5】:

        有两种可能的方法...

        1. 覆盖您的相关模型 admin.py save 方法,例如 it described in here

        2. 你可以使用信号as it described in here

        使用 admin.save_model 更简单,更适合您的需求。由于您有 table_id,您可以将该表的订单状态设置为“准备中”。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多