【发布时间】:2011-01-29 17:35:48
【问题描述】:
好的,这是我的情况: 我正在寻找最好的设计方法。 我在服务器端使用 PHP/Smarty,在客户端使用 HTML/jQuery,但这在这里并不重要。
我的服务器上有这个多用户系统。 它是一种订购系统。 一个标准用户——我们称他们为客户——可以从网上商店订购一些商品。 网上商店包含来自多个卖家的商品。
当用户(客户)下订单时,卖家(也是系统中的用户)必须收到有新订单的通知并确认/拒绝。
当卖家确认/拒绝订单时,必须向用户发送通知,告知他/她的订单状态。
订单以及订单确认信息都存储在数据库中。
我现在能想到的唯一方法是不断地——在短时间内使用 AJAX——从卖家的屏幕上检查数据库中的新记录,并为客户做同样的事情。正在等待确认。
但我在想,有没有办法在用户(客户)下订单时触发通知给卖家,这样卖家就可以只在需要时加载数据库,而不是每隔一段时间加载数据库?
客户在等待确认时也是如此。但这并不是那么重要,因为它不会一直发生。如果卖家不回复,订单将自动被拒绝,有一个等待限制。
希望你能理解我的问题。
【问题讨论】:
-
我认为您应该研究 COMET - 它基本上是一个术语,它封装了模拟 PUSH 机制的各种方法。看看这个答案stackoverflow.com/questions/603201/using-comet-with-php 和这个stackoverflow.com/questions/1320542/… 我认为这应该给你足够的开始
-
谢谢。彗星似乎是要走的路。只是我在这两个线程中有点迷失。我找不到多用户系统的示例。有什么帮助吗?
-
好的。我读了几篇关于 COMET 和长轮询的文章,现在基本明白了。唯一的问题是我被 Apache 服务器困住了,这不是这项工作的最佳选择。谁能告诉我 Apache 可以同时使用的最大持久连接数是多少?
-
Apache 有 CometProcessor 接口,当您使用 Http11NioProtocol 时,它将汇集连接。但是,我认为 Comet 不是解决此问题的正确方法,卖家或用户是否真的需要立即知道新订单已发生?我认为对于这个用例来说,每隔 1 或 2 分钟轮询一次就足够了。
-
马上知道并不重要。但为什么不呢?除了 apache 问题,关于彗星方法的任何缺点?
标签: ajax web-applications client-server comet multi-user