php:刷新数据和终端客户端连接

时间:2013-04-15 05:12:20

标签: php apache

我有一个php脚本(在正常的LAMP环境中),在脚本结束时运行几个内务处理任务。

我使用flush()将所有数据推送到客户端,工作正常(页面已满载),但浏览器仍在等待数据(由“loading”动画表示),这对于用户,但当然清楚,因为Apache无法知道PHP是否会在flush()之后生成更多输出 - 但在我的情况下它永远不会。但

有没有办法告诉客户端输出已完成,即使脚本一直在运行,也应该立即关闭http连接?

2 个答案:

答案 0 :(得分:0)

听起来你有一个长时间运行的脚本执行各种任务。特别是它似乎在将回复发送到客户端之后继续做事。这是一个打开很多潜在问题的设计。你应该重新考虑你的架构。

保持家务和客户沟通严格分开。例如,您可以处理客户端请求并触发内部子请求(您可以从中分离)或将任务转移到类似系统的cron。然后向客户提供第二个视图,该视图可视化这些任务的进度和结果。这种方法更安全,更灵活,并且在需要时更容易扩展。而且你手头的问题也解决了: - )

答案 1 :(得分:0)

你可以使用这个函数fastcgi_finish_request()特殊功能来完成请求并刷新所有数据,同时继续做一些耗时的事情(视频转换,统计处理等); http://php.net/manual/en/install.fpm.php但你需要为它安装FPM,如

<?php
 echo "You can see this from the browser immediately.<br>";
 fastcgi_finish_request();
 sleep(10);
 echo "You can't see this form the browser.";
?>