PHP中的异步外部应用程序执行

时间:2010-07-21 06:31:06

标签: php

我想知道是否可以将php运行的应用程序的输出发送给客户端。

例如,我有应用程序输出:

Hello world

10秒后输出

10 seconds passed

我想知道是否可以向客户端发送“Hello word”和“10秒钟”,而无需等到整个程序完成其工作。客户端将首先收到“Hello world”并在第二次输出后10秒钟收到。

谢谢。

4 个答案:

答案 0 :(得分:0)

我认为你应该用javascript做到这一点。在您的所有要求都是显示时间过去之前,完全没必要在服务器上使用cpu-cycle。

答案 1 :(得分:0)

通常,客户端从服务器中提取内容。如果您想从服务器推送到客户端,则需要查看push technologies之类的Comet。但是有not too much available for PHP。定期推送PHP脚本终止于中间需要Message Queue

答案 2 :(得分:0)

您的标题是“异步外部应用程序执行”。通过这种方式,您将意味着将从您的PHP脚本执行程序,但继续其自己的进程而不是挂起PHP页面加载。您可能希望passthru()专门设置命令输出到本地文件而不是您的脚本(个人未经过测试,尽管PHP手册说明了),或者pcntl_fork()将您的脚本拆分为单独的将处理程序执行的过程。但是,除非您在客户端上安装了一个将自动接受您的第二个新的tcp强制连接的木马,否则在它已经与您的服务器断开连接并期望它显示您未经邀请的消息之后双重发送到浏览器是不可能的。

但是,如果您想要为页面加载显示进度消息,只需在许多forwhile循环中的任何位置回显“仍在加载...”。另一方面,文件下载进度条无法在PHP中处理。在下载过程中回应“仍在加载...”将损坏文件。目前,我不知道有任何设施可以使用任何PHP,Javascript或VB方法执行此操作,但在浏览器自己的API(如果已记录)中,如果客户端通过安装您创作的插件允许它。但是,当浏览器已经有内置进度条时,为什么呢?

答案 3 :(得分:-1)

我不了解您的应用程序,但对于批处理,我想到了这一点:

php hello-world.php | php client.php

要缩放它,请使用Hadoop。