這篇文章主要介紹php - tcp 粘包/拆包的案例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),宜豐企業(yè)網(wǎng)站建設(shè),宜豐品牌網(wǎng)站建設(shè),網(wǎng)站定制,宜豐網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,宜豐網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。tcp 長鏈接模式下,使用固定消息頭長度的方式進(jìn)行消息拆包,解決粘包問題。
固定消息頭協(xié)議
將消息頭的前N個(gè)字節(jié)固定為消息長度位,結(jié)合業(yè)務(wù)場景,2bytes 或 4bytes,讀取消息時(shí)先讀取消息長度位,即可按具體的消息長度讀取消息內(nèi)容。
pack/unpack 可以打包數(shù)值至二進(jìn)制/解包二進(jìn)制至數(shù)值,具體的模式可以參考 pack/unpack 詳細(xì)用法,這里我們選用固定頭長度為2bytes來表示消息體長度,大能表示2^16 - 1長度的消息體,不夠你就上4bytes好了。
組包
粘包
// send// 傳輸 $package 由 $foo $bar 兩條消息組成 模擬粘包場景 // receive拆包
日常工作中經(jīng)常遇到的tcp場景可能是短連接單個(gè)消息的模式,客戶端發(fā)送一條消息后便關(guān)閉連接,服務(wù)端循環(huán)讀取到EOF即可得到一條完整的消息。但如果是短連接多個(gè)消息或長鏈接模式下,就可能會(huì)發(fā)生粘包,客戶端不關(guān)閉服務(wù)端無法通過EOL確定消息讀取完畢的問題。這就需要定義協(xié)議和拆包。
以上是php - tcp 粘包/拆包的案例分析的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文題目:php-tcp粘包/拆包的案例分析-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/dcjghs.html