阿贾克斯推力系统

2022-08-31 01:11:04

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

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

我可以每5秒打电话检查数据库中的订单,但这似乎是1980年?还是人们这样做?AJAX

每当我的php newOrder()函数(让我们称之为)被调用时,我如何将通知推送到我的页面?php


答案 1

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

看:

构建实时基础架构时的一般最佳实践是将推送解决方案与Web应用程序分离(注意:node.js并且 socket.io 已经改变了这一点,但我个人仍然认为它应该分离)。但是,假设后者仍然是最佳解决方案,则需要编写/托管/安装此推送解决方案。解耦还意味着该技术不必是PHP,但您可以从PHP访问/使用它。也许有点过分?特别是如果您的网站上没有太多用户?

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

资源:

如果您想研究替代方案或我上面提到的一些技术,我将维护一个您可能也感兴趣的实时技术列表


答案 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();
}

这是一种简单而有效的方法,可以让服务器完成所有艰苦的工作,而不是客户端的超时,这将导致浏览器占用内存。

更多关于这个:
简单的“长轮询”示例代码?
客户端通知,我应该使用 AJAX 推送还是轮询?
PHP 或 Javascript 轮询代码
ExtJS 3.0: Ext.Direct with PHP: Polling:ok and Push ?
彗星编程:使用Ajax模拟服务器推送


推荐