在我自己的系统中,我有一个PHP
页面,显示我通过我的在线网上销售的所有商品,从最新的交易到第一个。
我希望这个页面能够在人们向我购买东西时自动更新。
我可以让AJAX
调用每个 5 秒来检查我的数据库中的订单,但这似乎是1980年?
还是人们这样做?
如果我的php newOrder()函数(让我们称之为)被调用,我怎样才能向我的php
页面推送通知?< / p>
答案 0 :(得分:11)
您可以在PHP中实现推送,但它不是最有效的解决方案,因为要实现推送,您需要在客户端和服务器之间保持长时间运行的连接(HTTP或WebSocket连接)。
请参阅:
构建实时基础架构时的一般最佳实践是将推送解决方案与Web应用程序分离(注意:node.js和socket.io已经改变了一点,但我个人仍然认为它应该解耦)。但是,假设后者仍然是最佳解决方案,您需要编写/托管/安装此推送解决方案。解耦还意味着该技术不必是PHP,但您可以从PHP访问/使用它。也许有点矫枉过正?特别是如果您的网站上没有太多用户?
为简单起见,我建议您考虑使用第三方托管服务。我为一家名为Pusher的公司工作。使用像我们这样的服务可以省去安装和维护应用程序实时部分的需要。它还使添加您正在寻找的推送功能变得非常容易。您需要做的就是在现有应用程序中添加几行PHP代码,以触发推送通知,并为您的前端添加几行JavaScript。
资源:
如果您想调查我上面提到的替代方案或某些技术,我会保留一个您可能也感兴趣的list of realtime technologies。
答案 1 :(得分:2)
您可以通过执行以下操作来模拟推送效果(伪代码!)
// 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();
}
这是让服务器完成所有艰苦工作的简单而有效的方法,而不是客户端的超时,这会导致浏览器吃掉内存。
关于此的更多信息:
Simple “Long Polling” example code?
Client notification, should I use an AJAX Push or Poll?
PHP or Javascript poll code
ExtJS 3.0: Ext.Direct with PHP: Polling:ok and Pushing ?
Comet Programming: Using Ajax to Simulate Server Push
答案 2 :(得分:1)
除了关于nodejs的优秀建议..如果你仍然想用php来实现这个,你想要寻找COMET方法,而不是ajax。
如何在这里使用php:http://www.zeitoun.net/articles/comet%5Fand%5Fphp/start