现在发送数据到客户端,并继续PHP处理
是否可能在PHP中,以发送数据现在到客户端,并继续PHP处理(可能是阻塞)?现在发送数据到客户端,并继续PHP处理
<?php
// some code
echo json_encode(array('ok' => '1')); // the client is waiting for this AJAX answer !!
// how to send the response right now before finishing this PHP file ?
// the output is REALLY finished here, so client, you can work with it
some_blocking_processing(); // this is just some server processing that would
// block the client for ~ 5 seconds
// but it produces no output useful for client
?>
我知道正确的方式可能是使用队列或其他程序来进行处理。
但只是作为一个普遍的问题,是否有可能发送数据到客户端,在一个PHP文件中间?
那么这真的取决于some_blocking_processing()
实际上在做什么。我不能在不知道那里发生了什么的情况下提出解决方案。
但是,我可以指出你可以在哪些方面做更多的研究。其中一个可能是您正确的解决方案:
- PHP threading
- 产卵异步PHP程序
- 登录文件/数据库的状态,然后通过一个cron作业做额外的处理
'some_blocking_processing()'确实从互联网上下载了一个.JPG(不是从用户上传的...)并将其转换成缩略图。如果图像很大(例如'5000x10000px'),则可能会阻挡2〜5秒。 – Basj 2015-03-31 00:05:02
这是@Asquared:http://pastebin.com/aHCRwUtZ – Basj 2015-03-31 00:13:19
为什么你不能在cron工作中这样做?只需将文章中的文件名保存到队列中(服务器或数据库上的文本文件),然后使用cron作业下载并创建图像。这个文件将完全独立于你的php代码,所以不会影响速度。 – 2015-03-31 00:41:38
是的,看看[输出缓冲](http://php.net/manual/en/book.outcontrol.php) – 2015-03-30 22:18:07
@JohnConde只需在开始时使用'ob_start()'和在'echo'之后使用'ob_flush()'。这就是全部? – Basj 2015-03-30 22:25:29
最简单的,是的。它可能需要更多的登录,具体取决于你在做什么,但这是它的基本要点。 – 2015-03-30 22:26:55