2

好的,情况就是这样 - 简单明了:

  • 在页面 A 上:我们执行一个 ajax 请求(比如说 to intermediate.php),它启动了一个后台进程 - 比如说back.php
  • interm.php返回
  • back.php继续工作直到完成,同时在数据库中更新其进度。

那么,页面 A 怎么会收到back.php已完成的通知呢?

(我曾想过例如每 1-2 秒向脚本发出一个 ajax 请求来检查 dbback.php的进度,但这看起来很奇怪,而且绝对没有效率......)

有任何想法吗?

4

2 回答 2

6

您可以使用很常见且不那么奇怪的长轮询或短轮询技术。它确实提出了很多不必要的请求,但它是最简单和最受支持的方法。

第二种方法是使用网络套接字。现在通常不支持通过 html5 的 Web 套接字,但是如果您的浏览器/设备不支持以前的方法。一个非常好的实时通信库是 Socket.IO。它允许实时或接近实时的许多不同实现,它还允许您选择要使用的通信方法。一些基于云的 Web 服务(例如 Paas)并未广泛支持 Web 套接字。图书馆将通过让您选择或强制使用特定的通信方法来解决此问题:Web Sockets、Flash Sockets、Long-Polling 等。

但由于你使用 php,你可以试试这个:https ://github.com/lemmingzshadow/php-websocket

尽管正如在其中一些网站上所提到的,将 websockets 与 php 一起使用并不像 node.js 或 twisted python 那样直接。但尽管如此,它是可以实现的,并且在某种程度上确实有效。我发现拥有一个 node.js 后端来做实时工作比试图强制使用一种不应该以这种方式工作的技术要容易得多。

于 2012-08-01T01:45:25.533 回答
1

您基本上要寻找的是彗星。这是一个很好的线程:

在 PHP 中使用彗星?

于 2012-08-01T01:47:50.167 回答