如何使用curl实现渐进式响应

时间:2015-12-10 18:40:59

标签: php curl

我在PHP中构建一个项目,系统向另一个域发送curl请求以处理查询。例如。 http://domain.com/process_query?q=abcprocess_query控制器对一组文件执行查询,并以下列格式返回各个文件的摘要结果。

[
    array('filename' => "one.dat", 'summary_counts' => 5),
    array('filename' => "two.dat", 'summary_counts' => 30),
    array('filename' => "three.dat", 'summary_counts' => 4),
    array('filename' => "four.dat", 'summary_counts' => 70),
    array('filename' => "five.dat", 'summary_counts' => 0)
]

然后由系统捕获,该系统发送卷曲请求并在屏幕上呈现它。我希望以渐进的方式做到这一点。就像,只要process_query控制器完成处理文件,就应该能够echo响应[array('filename' => "one.dat", 'summary_counts' => 5)]并继续处理下一个文件。如果可以,则对于收到的每个响应,系统都可以显示渐进式查询处理。可以使用PHP-curl来实现。如果不是最好的替代方式是什么?

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。有一个库https://github.com/stil/curl-easy访问这个gitHub库并查看有关如何实现它的文档!

希望它有所帮助: - )

答案 1 :(得分:0)

可能有一些像Rafique所提到的工具通过并行运行curl请求来帮助提高性能,尽管如果你的主要目标是在运行任务的每个步骤后发送进度报告,你可以简单地{{1}然后echo对浏览器的响应。

这是一个超级简单的脚本,演示了通过脚本部分地将内容刷新到浏览器的能力:

flush()

当您从<?php echo "1\n"; ob_flush(); flush(); sleep(1); echo "2\n"; ob_flush(); flush(); sleep(1); echo "3\n"; 这样的命令行访问此内容时,您会看到数字彼此相差一秒钟,显示为1,2,3。

您可以将此技术与AJAX结合使用,从您的网页触发长时间操作,然后在页面上显示某种进度/状态更新。您可能需要挂钩onprogress事件(see this thread),否则您可以在iframe中触发它并逐步查看输出显示(确保填充它as discussed here)。