Ajax推送系统

在我自己的系统中,我有一个PHP页面,显示通过我的在线网上商店销售的所有商品,从最新的交易到第一个。

我希望这个页面自动更新,每当有人从我那里买东西时。

我可以每5秒钟进行一次AJAX调用来检查我的数据库中的订单,但似乎是1980年? 或者人们是这样做的吗?

当我的php newOrder()函数(可以称之为)被调用时,我该如何去推送一个通知到我的php页面?


您可以在PHP中实现推送,但它不会是最有效的解决方案,因为实现推送需要保持客户端和服务器之间的长时间连接(HTTP或WebSocket连接)。

看到:

  • 长轮询/ HTTP流媒体一般问题
  • phpwebsocket
  • 在github上的php-websocket
  • 棘轮
  • 如何在PHP中实现彗星 - 经常联系指导
  • 构建实时基础架构时的一般最佳实践是将推送解决方案与Web应用程序分离(注意:node.js和socket.io已经改变了这一点,但我个人认为它应该被解耦)。 但是,假设后者仍然是您需要编写/托管/安装此推送解决方案的最佳解决方案。 解耦也意味着该技术不一定是PHP,但您可以从PHP访问/使用它。 也许有点矫枉过正? 特别是如果您的网站没有太多用户?

    为了简单起见,我建议您考虑使用第三方托管服务。 我为一家名为Pusher的公司工作。 使用像我们这样的服务可以让您免去安装和维护应用程序实时部分的需要。 它还使添加您正在查找的推送功能变得非常简单。 您只需在现有应用程序中添加几行PHP代码即可触发推送通知,并在您的前端添加几行JavaScript代码。

    资源:

  • 最常使用PHP库的是:https://github.com/pusher/pusher-php-server
  • 快速入门指南
  • 如果您想调查上面提到的替代方案或某些技术,我将保留一份您可能也感兴趣的实时技术列表。


    您可以通过执行以下操作来模拟推送效果(伪代码!)

    // 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:使用PHP的Ext.Direct:轮询:确定并推送?
    彗星编程:使用Ajax模拟服务器推送


    除了关于nodejs的优秀建议之外,如果你仍想使用php来实现这一点,你需要寻找COMET方法,而不是ajax。

    如何用PHP在这里:http://www.zeitoun.net/articles/comet%5Fand%5Fphp/start

    链接地址: http://www.djcxy.com/p/44811.html

    上一篇: Ajax push system

    下一篇: Sailsjs Socket IO