Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax 客户端交互设计问题?_Ajax_Web Applications_Client Server_Comet_Multi User - Fatal编程技术网

Ajax 客户端交互设计问题?

Ajax 客户端交互设计问题?,ajax,web-applications,client-server,comet,multi-user,Ajax,Web Applications,Client Server,Comet,Multi User,好的,这是我的情况: 我在寻找最好的设计方法。 我在服务器端使用PHP/Smarty,在客户端使用HTML/jQuery,但这在这里并不重要 我的服务器上有这个多用户系统。 这是一种订购系统。 标准用户(我们称之为客户)可以从webshop订购一些商品。 该网店包含来自多个卖家的商品 当用户(客户)下订单时,卖方——也是系统中的用户——必须得到通知,有新订单并确认/拒绝 当卖方确认/拒绝订单时,必须向用户发送通知,告知其订单状态 订单和订单确认都存储在数据库中 我现在唯一能想到的方法就是不断地—

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

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

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

当卖方确认/拒绝订单时,必须向用户发送通知,告知其订单状态

订单和订单确认都存储在数据库中

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

但是我在想,当用户(客户)下订单时,有没有办法触发对卖家的通知,这样卖家就可以只在需要时加载数据库,而不是不断地间隔加载

客户在等待确认时也是如此。但这并不重要,因为它并非总是发生。如果卖方不响应,订单将自动被拒绝,这有一个等待限制


我希望你能理解我的问题

虽然即时更新很好,但实际上,无论如何更新都不会是即时的,在互联网上传输数据时总会有一定程度的延迟

出于几个原因,投票选项似乎更具吸引力

您所描述的系统听起来似乎是,尽管它可能一开始规模很小,但它很容易扩展到多服务器配置。轮询将允许您创建一个AJAX请求可以查询的轮询服务器。这可以针对AJAX的小型和快速特性进行优化,作为标准web服务器,AJAX可以专用于通常意义上的web页面显示

轮询的思想也适用于REST风格的API,使轮询区域完全独立于浏览器。你可能会发现,再往下看,你系统上的卖家更喜欢本地应用,甚至是iPhone/Android应用。RESTAPI允许您从任何可以发出HTTP请求的应用程序执行此操作


从本质上讲,您避免被锁定在特定的技术中,这为未来的可能性打开了大门。它不会增加任何工作量,并提供永久连接所不允许的灵活性。

虽然即时更新很好,但实际上,无论如何更新都不会是即时的,在互联网上传输数据时总会有一定程度的延迟

出于几个原因,投票选项似乎更具吸引力

您所描述的系统听起来似乎是,尽管它可能一开始规模很小,但它很容易扩展到多服务器配置。轮询将允许您创建一个AJAX请求可以查询的轮询服务器。这可以针对AJAX的小型和快速特性进行优化,作为标准web服务器,AJAX可以专用于通常意义上的web页面显示

轮询的思想也适用于REST风格的API,使轮询区域完全独立于浏览器。你可能会发现,再往下看,你系统上的卖家更喜欢本地应用,甚至是iPhone/Android应用。RESTAPI允许您从任何可以发出HTTP请求的应用程序执行此操作


从本质上讲,您避免被锁定在特定的技术中,这为未来的可能性打开了大门。它不会增加任何工作量,并提供永久连接所不允许的灵活性级别。

上述COMET和长轮询是此问题的常见解决方案。但你也可以研究HTML5Web套接字。它在所有浏览器中都受支持,但IE浏览器有补丁/多边形填充


您还可以查看Node.js以在apache上运行。

上述COMET和长轮询是解决此问题的常见方法。但你也可以研究HTML5Web套接字。它在所有浏览器中都受支持,但IE浏览器有补丁/多边形填充


您还可以查看Node.js以与apache一起运行。

这里对类似问题的回答表明,apache线程从所有与客户端的开放连接中绑定可能存在一些问题

根据上的这篇博文,可以在PHP中使用continuations,但似乎没有那么多关于这个主题的文档。然而。目前还不清楚他们是否在使用continuations,但他们声称可以扩展到100000个连接。关于PHP Comet的更多信息可以在这个类似的堆栈溢出问题中找到

我还打算建议使用Java,因为Java在实现带有Continuations的可伸缩Comet方面有着非常好的记录。是聊天软件的一个例子,它在一个平台上使用comet和continuations

因为您的代码是用PHP编写的,所以您可以。此外,这还为您带来了额外的优势。有关更多信息,请查看


更新:我建议您自己做基准测试或自己研究速度问题,因为可能有一些信息表明Apache更快。如果使用Querces,重要的是要理解,您实际上是在编写看起来和感觉上都像PHP的Java。因此,我建议您也进行更多的研究,以便您了解这种方法的优缺点。

这里对类似问题的回答表明,Apache thre可能存在一些问题