Ajax推送系统
在我自己的系统中,我有一个PHP
页面,显示通过我的在线网上商店销售的所有商品,从最新的交易到第一个。
我想这个页面自动更新,每当有人从我这里买东西。
我可以每5秒钟进行一次AJAX
调用来检查我的数据库中的命令,但似乎是1980年? 或者是人们这样做?
当我的php newOrder()函数被调用的时候,我怎样才能把通知推到我的php
页面呢?
您可以在PHP中实现推送,但它不会是最有效的解决scheme,因为实现推送需要保持客户端和服务器(HTTP或WebSocket连接)之间的长时间连接。
看到:
- 长轮询/ HTTPstream媒体的一般问题
- phpwebsocket
- 在github上的php-websocket
- 棘轮
- 如何在PHP中实现彗星 – 频繁挂钩引导
构build实时基础架构时的一般最佳实践是将推送解决scheme与Web应用程序分离( 注意:node.js和socket.io已经改变了这一点,但个人而言,我仍然认为它应该被解耦 )。 但是,假设后者仍然是最好的解决scheme,则需要编写/托pipe/安装此推送解决scheme。 解耦也意味着该技术不一定是PHP,但您可以从PHP访问/使用它。 也许有点矫枉过正? 特别是如果你的网站没有太多用户?
为了简单起见,我build议看看使用第三方托pipe服务。 我为一家名为Pusher的公司工作。 使用像我们这样的服务可以让您免去安装和维护应用程序的实时部分的需要。 这也使得添加你正在寻找的推送function变得非常简单。 您只需在现有的应用程序中添加几行PHP代码即可触发推送通知,并在您的前端添加几行JavaScript代码。
资源:
- 最常用的PHP库是: https : //github.com/pusher/pusher-php-server
- 快速入门指南
如果您想调查上面提到的替代scheme或某些技术,我将保留您可能也感兴趣的实时技术列表 。
您可以通过执行以下操作来模拟推送效果(伪代码!)
// 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 Push还是Poll?
PHP或Javascript轮询代码
ExtJS 3.0:Ext.Direct与PHP:轮询:确定和推?
彗星编程:使用Ajax模拟服务器推送
除了关于nodejs的优秀build议之外,如果你还想使用php来实现这个,你想要的是COMET方法,而不是ajax。
如何与PHP在这里: http : //www.zeitoun.net/articles/comet%5Fand%5Fphp/start