通知Ajax/Javascript后台PHP已经完成


Notify Ajax/Javascript that background PHP has completed

好吧,情况很简单明了:

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

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

(例如,我曾想过每隔1-2秒向脚本发出一个ajax请求,检查数据库中back.php的进度,但这似乎很奇怪,而且肯定没有效率…)

有什么想法吗?

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

第二种方法是使用网络套接字。现在,到目前为止,通过html5的网络套接字通常不受支持,但另一种选择是使用一个库来处理其他方法的回退,如flash,或者如果您的浏览器/设备不支持以前的方法,则使用长轮询。Socket是一个非常好的实时通信库。IO。它允许许多不同的实时或接近实时的实现,它还允许您选择要使用的通信方法。一些基于云的web服务(如Paas)并不广泛支持web套接字。图书馆将通过让你选择或强制使用一种特定的通信方法来绕过这一点:网络套接字、闪存套接字、长轮询等

但是,由于您使用php,您可以尝试以下操作:https://github.com/lemmingzshadow/php-websocket

  • http://www.htmlgoodies.com/html5/other/create-a-bi-directional-connection-to-a-php-server-using-html5-websockets.html#fbid=8Pw-Juo8eHG
  • 方法略有不同
  • http://www.gamedev.net/topic/613642-socketio-php-mysql/
  • http://devzone.zend.com/209/writing-socket-servers-in-php/
  • socket.io+php+在这个时候这是一个现实的解决方案吗

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

您基本上要查找的是Comet。这里有一个很好的线索:

将comet与PHP结合使用?