這篇文章主要介紹php - tcp 粘包/拆包的案例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
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://www.weahome.cn/article/dcjghs.html