Php 使用分块传输编码发送滚动卷曲获得的数据

Php 使用分块传输编码发送滚动卷曲获得的数据,php,curl,chunked-encoding,Php,Curl,Chunked Encoding,我使用rolling curl从其他40个网站获取数据。一旦结果可用于某个网站,就会立即使用块发送结果 为了实现这一点,我添加了以下标题:- header("Transfer-encoding: chunked"); flush(); 我还使用了一个函数来打印块:- function print_chunks($chunk){ $chunk = json_encode($tempArray); echo sprintf("%x\r\n", strlen(($chunk)));

我使用rolling curl从其他40个网站获取数据。一旦结果可用于某个网站,就会立即使用块发送结果

为了实现这一点,我添加了以下标题:-

header("Transfer-encoding: chunked");
flush();
我还使用了一个函数来打印块:-

function print_chunks($chunk){
    $chunk = json_encode($tempArray);
    echo sprintf("%x\r\n", strlen(($chunk)));
    print_r($chunk);
   echo "\r\n";
   flush();
}
在我的例子中,每个块都是JSON格式的数据,其大小可以是零以外的任何值

在客户端,我使用它来处理我的响应:-

xml.onprogress = function () {
alert("Triggered");
}
这只会在大约40个电话中触发两次。我猜很多回复在实际发出之前就已经被合并了。这会导致严重的性能差,因为结果不是单独发送的,而是在发送所有结果之后才发送的。这是因为单个响应的大小很小吗

是发送分块数据以签出的实际句柄

更新:

单个块的最小大小是否有任何限制?如果我只发送简单的小字符串块,它会将我的所有块一起发送

这是我使用的完整代码。即使我在这里做了10块,我也会在20秒后把它们全部放在一起:-

<?php
header("Transfer-encoding: chunked");
flush();


function dump_chunk($chunk)
{
    echo sprintf("%x\r\n", strlen($chunk));
    echo $chunk;
    echo "\r\n";
    flush();
}

$string = "Hello World, This is chunk1";
$string1 = "Hello World, This is chunk2";
$string2 = "Hello World, This is chunk3";
$string3 = "Hello World, This is chunk4";
$string4 = "Hello World, This is chunk5";
$string5 = "Hello World, This is chunk6";
$string6 = "Hello World, This is chunk7";
$string7 = "Hello World, This is chunk8";
$string8 = "Hello World, This is chunk9";
$string9 = "Hello World, This is chunk10";
$string10 = "";

dump_chunk($string);
sleep(2);
dump_chunk($string1);
sleep(2);
dump_chunk($string2);
sleep(2);
dump_chunk($string3);
sleep(2);
dump_chunk($string4);
sleep(2);
dump_chunk($string5);
sleep(2);
dump_chunk($string6);
sleep(2);
dump_chunk($string7);
sleep(2);
dump_chunk($string8);
sleep(2);
dump_chunk($string9);
sleep(2);
dump_chunk($string10);

?>


如果我不清楚我的疑问,请发表评论。

打印块
功能的末尾,使用将内容推送到浏览器应该可以工作。

打印块
功能的末尾,使用将内容推送到浏览器应该可以工作。

我实际上使用了它。我忘了把它贴在这儿了。你能检查一下我提供的句柄,看看有多少数据块来了,这只是给了我一个空页面。没有,甚至源代码上也没有。请等待大约30秒。还要确保结尾处有一些搜索文本。嗯,这里不起作用。我想这是我糟糕的连接的错。实际上我用过。我忘了把它贴在这儿了。你能检查一下我提供的句柄,看看有多少数据块来了,这只是给了我一个空页面。没有,甚至源代码上也没有。请等待大约30秒。还要确保结尾处有一些搜索文本。嗯,这里不起作用。我假设这是我糟糕的连接的错误。您是否使用任何干扰缓冲的Apache模块,例如
mod\u gzip
?不,我没有使用任何其他模块。是否有任何在线调试器可以提交我的句柄?您是否使用任何干扰缓冲的Apache模块,例如
mod\u gzip
?不,我没有使用任何其他模块有任何在线调试器可以提交我的句柄吗?