我正在使用滾動捲曲從其他40個網站獲取數據。只要結果可用於網站,它們就會立即通過使用塊發送出去。使用分塊傳輸編碼發送通過滾動獲得的數據Curl
要實現這一點,我添加以下標題: -
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調用。我想很多回應都是在實際發送之前合併的。這會導致嚴重的不良表現,因爲結果不是單獨發出,而是在所有結果發出後才發出。這是否由於個人反應的規模較小?
Here是發送分塊數據檢出的實際句柄。
更新:
是否有個別塊的最小尺寸的任何約束?如果我只發送簡單的小字符串塊,它會將所有的塊發送到一起。
這是我使用的完整代碼。即使我在這裏製作了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);
?>
如果我不清楚詢問我的疑問,請發表評論。
你是否在使用任何干擾緩衝的Apache模塊,比如'mod_gzip'? – rmobis
不,我沒有使用任何其他模塊 –
有沒有在線調試器,我可以提交我的句柄? –