阿贾克斯推力系统
在我自己的系统中,我有一个页面,显示我通过网上商店销售的所有商品,从最新交易到第一笔。PHP
我希望这个页面自动更新,每当人们从我这里购买东西。
我可以每5秒打电话检查数据库中的订单,但这似乎是1980年?还是人们这样做?AJAX
每当我的php newOrder()函数(让我们称之为)被调用时,我如何将通知推送到我的页面?php
在我自己的系统中,我有一个页面,显示我通过网上商店销售的所有商品,从最新交易到第一笔。PHP
我希望这个页面自动更新,每当人们从我这里购买东西。
我可以每5秒打电话检查数据库中的订单,但这似乎是1980年?还是人们这样做?AJAX
每当我的php newOrder()函数(让我们称之为)被调用时,我如何将通知推送到我的页面?php
你可以在PHP中实现推送,但它不会是最有效的解决方案,因为要实现推送,你需要在客户端和服务器之间保持长时间运行的连接(HTTP或WebSocket连接)。
看:
构建实时基础架构时的一般最佳实践是将推送解决方案与Web应用程序分离(注意:node.js并且 socket.io 已经改变了这一点,但我个人仍然认为它应该分离)。但是,假设后者仍然是最佳解决方案,则需要编写/托管/安装此推送解决方案。解耦还意味着该技术不必是PHP,但您可以从PHP访问/使用它。也许有点过分?特别是如果您的网站上没有太多用户?
为简单起见,我建议考虑使用第三方托管服务。我为一家名为Pusher的公司工作。使用像我们这样的服务,您无需安装和维护应用程序的实时部分。它还使添加您正在寻找的推送功能变得非常容易。您需要做的就是向现有应用程序添加几行PHP代码以触发推送通知,并向前端添加几行JavaScript。
资源:
如果您想研究替代方案或我上面提到的一些技术,我将维护一个您可能也感兴趣的实时技术列表。
您可以通过执行以下操作来模拟推送效果(伪代码!
// This would go on for 60-90 seconds, unless there is new data
for($i = 1; $i <= 60; $i++) {
// Check in the database what the last timestamp is
// Compare this to the timestamp that has been posted by the AJAX-call
// If there is something new, show the data and then exit
// If not, sleep for 1-3 seconds
}
你的 javascript:
function pollForNewProducts() {
// Check if there is a timestamp
// Make an AJAX-request to the script that has the first code in it
// If there is a response (JSON?) than evaluate that
// If not, then run the script again
pollForNewProducts();
}
这是一种简单而有效的方法,可以让服务器完成所有艰苦的工作,而不是客户端的超时,这将导致浏览器占用内存。
更多关于这个:
简单的“长轮询”示例代码?
客户端通知,我应该使用 AJAX 推送还是轮询?
PHP 或 Javascript 轮询代码
ExtJS 3.0: Ext.Direct with PHP: Polling:ok and Push ?
彗星编程:使用Ajax模拟服务器推送