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

问题描述:

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

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

当用户(客户)下订单,卖家 - 也是在系统中的用户 - 已经得到通知,有一个新的订单,并确认/拒绝它。

当卖方确认/下降的顺序,通知已被发送到用户给他/她他/她的订单的状态。

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

我现在能想到的唯一方法就是不断地 - 在与AJAX的短时间间隔内 - 从卖家的屏幕上检查数据库中的新记录,并且当他/她正在等待确认。

但我在想,有没有什么办法来触发通知卖家,当用户(客户)下订单,以便在需要时,卖方只能加载数据库和间隔不不断?

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

我希望你能理解我的问题。

+1

我想你应该看看COMET--它基本上是一个封装各种方式来模拟PUSH机制的术语。看看这个答案http://*.com/questions/603201/using-comet-with-php和这一个http://*.com/questions/1320542/simple-comet-example-using-php-and- jQuery的我认为,应该给你足够的开始 – InSane 2011-01-29 18:08:31

回答类似于Using Comet with PHP的问题表明,Apache线程可能会与所有打开的客户端连接有关。

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

我还打算建议使用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更快。如果使用查询,重要的是要明白,你基本上正在编写Java,看起来就像PHP一样。因此,我还建议在那里进行更多的研究,以便了解这种方法的优缺点。

虽然即时更新将是很好的,在现实中,更新绝不会瞬间无论如何,总会有在通过互联网transfering数据一定程度的固有等待时间的。

由于以下几个原因,轮询选项似乎更具吸引力。

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

轮询理念还适合于一个REST风格的API,使得投票区完全独立的浏览器。你可以找到更深层次的原因,系统上的卖家更喜欢拥有原生应用程序,甚至是iPhone/Android应用程序。 REST API将允许您从任何可以发出HTTP请求的应用程序执行此操作。

从本质上讲,您正在避免被锁定到特定的技术,并打开未来的可能性。它不会增加任何大量的工作,并且提供了渗透性连接不允许的柔性水平。

上面提到的COMET和长轮询是解决这个问题的常用方法。但您也可以查看HTML5网络套接字。它支持所有浏览器,但是IE浏览器有补丁/补丁。

你也可以看看Node.js沿着apache运行。