2013-01-09 50 views
1

我正在使用滾動捲曲從其他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); 

?> 

如果我不清楚詢問我的疑問,請發表評論。

+0

你是否在使用任何干擾緩衝的Apache模塊,比如'mod_gzip'? – rmobis

+0

不,我沒有使用任何其他模塊 –

+0

有沒有在線調試器,我可以提交我的句柄? –

回答

1

使用flush()將內容推送到瀏覽器,在print_chunks函數結束時,應該可以工作。

+0

我真的用過。我忘了在這裏發佈。你可以檢查我提供的句柄,找出有多少塊數據即將到來http://compare.buyhatke.com/example.php?searchText=Dumb%20and%20dumber –

+0

這只是給我一個空白頁面。什麼也沒有,甚至在源代碼上也沒有。 – rmobis

+0

請等待約30秒。還要確保在末尾有一些searchText –