国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

呼叫大神walkor,Gateway的客戶端接收數(shù)據(jù),8192字節(jié)不夠的問題

angelhome

小弟超級菜鳥,最近有個項目,準(zhǔn)備用Gateway做數(shù)據(jù)服務(wù)端,就找了個例子來做參考,events.php的onmessage處理業(yè)務(wù),然后返回了一個數(shù)量較大的字符串集,客戶端用fread()來讀取,但是8192字節(jié)好像不夠用,造成了顯示的數(shù)據(jù)不全,請問walkor我應(yīng)該如何處理,多謝了。
代碼截取如下:
服務(wù)端onmessage:
返回一個拼成的網(wǎng)頁,數(shù)據(jù)有時較大。

foreach($sumtable as $link)
{
    //echo $link."_".$link."_".$link."*".$link."\n";
    $html .="<tr ";
    if( $i%2 == 1)
    {
        $html .="bgcolor=\"#CCCCCC \"";
    }
    $html .="onClick=\"test('".$link."','".$link."','".$starttime."','".$endtime."')\">";
    //$html .="<td width=25%>".$link."</td>";
    $html .="<td width=25%>".$link."</td>";
    $html .="<td width=25%>".number_format($link,2)."</td>";
    $html .="<td width=25%>".number_format($link,2)."</td>";
    $html .="<td width=25%></td>";
    $html .="</tr>";
    $i++;
}
//echo $html;
Gateway::sendToCurrentClient($html);
return;

客戶端讀?。?/p>

$link=stream_socket_client('tcp://192.168.2.161:8282');
if(!$link) { echo "連接失敗";}
else {
    //發(fā)送店鋪品類銷售
    //$stime=time();
    $data_array=array('type'=>'depsaletype','starttime'=>$starttime,'endtime'=>$endtime);
    $data=json_encode($data_array);
    fwrite($link,$data);
    echo $receive=fread($link,8129);
}

因為參考的一個例子,所以用fwrite來發(fā)送數(shù)據(jù),用fread讀取,這里的fread($link,8192),8192字節(jié)好像不夠用,但是不知道該怎么處理。希望walkor能給我點意見,本人php菜鳥,多謝賜教。

4753 1 0
1個回答

walkor 打賞

tcp本來就是流式的,數(shù)據(jù)一點一點流入對方。收到的數(shù)據(jù)不全是正常的,說明還需要繼續(xù)調(diào)用fread讀取,直到讀取到全部數(shù)據(jù)。

基于tcp傳輸需要定一個通訊協(xié)議來組包,具體看workerman手冊通訊協(xié)議部分。
原理是每個消息里面都帶上消息長度的標(biāo)記,例如用某個特殊字符作為消息結(jié)束符,fread返回的數(shù)據(jù)里沒有結(jié)束符,那么認(rèn)為消息還有數(shù)據(jù)沒收完,繼續(xù)調(diào)用fread讀取,直到讀到結(jié)束符。

  • angelhome 2017-11-20

    受教了,感謝walkor的回答,我再認(rèn)真讀下手冊,不行的話再用別的協(xié)議試試。多謝了

年代過于久遠(yuǎn),無法發(fā)表回答
??