客户端 - 客户端交互设计问题?

时间:2011-01-29 17:35:48

标签: ajax web-applications client-server comet multi-user

好的,这是我的情况: 我正在寻找最好的设计方法。 我在服务器端使用PHP / Smarty,在客户端使用HTML / jQuery,但这在这里并不重要。

我的服务器上有这个多用户系统。 这是一种订购系统。 标准用户 - 让我们称他们为客户 - 可以从网上商店订购一些商品。 网上商店包含来自多个卖家的商品。

当用户(客户)下订单时,卖方(也是系统中的用户)必须收到通知,告知有新订单并确认/拒绝订单。

当卖家确认/拒绝订单时,必须向用户发送通知,告知他/她订单的状态。

订单存储在数据库中,以及订单确认。

我现在能想到的唯一方法是不断地 - 在AJAX的短时间内 - 从卖家的屏幕上检查数据库中的新记录,并在他/她为客户做同样的事情时正在等待确认。

但我在想,当用户(客户)下订单时,有没有办法向卖家发出通知,这样卖家只能在需要时加载数据库而不是间隔时间加载数据库?

客户在等待确认时也是如此。但这并不是那么重要,因为它不会一直发生。如果卖家没有回复,订单将自动拒绝,有一个等待限制。

我希望你理解我的问题。

3 个答案:

答案 0 :(得分:1)

Using Comet with PHP上类似问题的答案表明,Apache线程可能存在一些问题,从所有打开的连接到客户端。

根据PHP Continuations上的这篇博客文章,可以使用PHP的延续,但似乎没有关于这个主题的文档。但是,CometChat did it in PHP。目前尚不清楚他们是否正在使用延续,但他们声称可以扩展到100,000个连接。有关PHP Comet的更多信息可以在关于A Solution for Comet and PHP的类似Stack Overflow问题中找到。

我还建议使用Java,因为Java在实现可扩展的Comet with Continuations方面有着非常好的记录。 Conversion Support是在Jetty Web Server上使用彗星和延续的聊天软件示例。

由于你的代码是PHP,你可以Use Querces to run your PHP code on the JVM。此外,Querces PHP Benchmarks Suggest it's Faster than Apache,为您提供额外的优势。有关详细信息,请查看Querces Project

更新:我建议你自己做基准测试或研究速度问题,因为可能会有一些信息表明Apache速度更快。如果使用Querces,重要的是要理解你本质上是在编写恰好看起来像PHP的Java。因此,我建议在那里进行额外的研究,以便您了解这种方法的优缺点。

答案 1 :(得分:0)

虽然即时更新会很好,但实际上,更新永远不会是即时的,通过互联网传输数据总会存在一定程度的延迟。

由于多种原因,投票选项看起来更具吸引力。

您描述的系统听起来好像虽然可能从小规模开始,但它很容易扩展到多服务器配置。轮询将允许您创建AJAX请求可以查询的轮询服务器。这可以针对AJAX的小而快的特性进行优化,因为标准的Web服务器可以专用于通常意义上的网页显示。

轮询的想法也适用于REST风格的API,使得轮询区域完全独立于浏览器。您可以发现,系统中的卖家更愿意拥有原生应用,甚至是iPhone / Android应用。 REST API允许您从任何可以发出HTTP请求的应用程序执行此操作。

基本上你是在避免陷入特定技术,这开启了未来的可能性。它不会增加任何大量的工作,并且提供了一种灵活性,而且无法实现透明连接。

答案 2 :(得分:0)

如上所述的COMET和长轮询是此问题的常见解决方案。但您也可以查看HTML5网络套接字。它在所有浏览器中都受支持,但IE浏览器有补丁/ polyfill。

你也可以看看Node.js与apache一起运行。