客戶端發(fā)送數(shù)據(jù)如下:
服務(wù)端接收數(shù)據(jù)如下:
請問服務(wù)端應(yīng)該如何組裝數(shù)據(jù),或者說怎么處理成一條
TCP有兩個特點:
1、基于流式傳輸(分片傳輸)
2、數(shù)據(jù)數(shù)據(jù)流沒有邊界
根據(jù)特點1,數(shù)據(jù)大于某個值(1.4k左右)就會被分片,所以基于TCP傳輸時你收到數(shù)據(jù)的時候就是一段一段的。
根據(jù)特點2,由于沒有邊界,沒有辦法知道收到當(dāng)前這一段數(shù)據(jù)是否是最后一段,只能通知業(yè)務(wù)自行判斷。所以業(yè)務(wù)與服務(wù)端要定一個通訊協(xié)議,一般是把整個包的大小寫到某個位置,例如http協(xié)議里post請求的數(shù)據(jù)大小一般放到http頭里的content-length字段里。
正是由于以上兩特點,所以才在TCP基礎(chǔ)上產(chǎn)生了那么多的通訊協(xié)議,例如http、smtp、websocket、ftp、mqtt等等。通訊協(xié)議的作用就是從分段傳輸?shù)臄?shù)據(jù)中計算出請求長度,并把數(shù)據(jù)流里的完整請求組裝拆分出來。
所以你要做的就是采用某種通訊協(xié)議來傳輸你的數(shù)據(jù)。
參考手冊
http://doc.workerman.net/protocols/why-protocols.html
http://doc.workerman.net/protocols/how-protocols.html
http://doc.workerman.net/protocols/example.html