再聊t-io網路程式設計架構的基礎知識:半包和粘包
半包
顧名思義,就是收到了半個包,這個時候不足以組成一個應用層的包。就像你要對你喜歡的人說 “我喜歡你”,但是因為喝水嚥著了,第一次只說了“我”字,第二次說了個“喜”字,第三個次了個“歡你”,那麼就發生了半包問題,對方只有等待你說完這 4 個字後才知道你是想說“我喜歡你”!
用 http 協議為例,展示半包場景
粘包
粘包與半包相反,就是把多個想說的話,一口氣說完了,對方反應不過來,得把你的話拆開一條一條地理解
用 http協議為例,展示粘包場景
說明:http協議是一來一回的,所以正常場景是不會有粘包的,但pipeline模式下是允許一方連續發多個請求的,所以會有粘包產生
為何坑人無數
初涉網路程式設計的同學,往往認為每次收到的資料剛好是一個完整的資料包
於是當網路不好,或是訊息包過大時,半包的情況就發生了,而程式並沒有考慮到半包的情況,結果就是解碼失敗,導致訊息丟失
當通訊的對方把多條業務資料包放在一個 TCP包中發過來時,粘包就產生了,而程式沒有考慮到一次TCP收包會收到多個業務包,從而解析到第一個業務包後把後面的業務包丟棄了
百度一下半包粘包,一定會搜到很多記錄,這也證明這倆貨確實坑人無數,所以看完本節內容,你還會繼續犯半包粘包的錯嗎?
具體請參考:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006579/viewspace-2795474/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- t-io網路程式設計基礎知識介紹程式設計
- 詳說tcp粘包和半包TCP
- 網路程式設計基礎知識程式設計
- 網路程式設計框架t-io的程式設計基本知識介紹程式設計框架
- 程式設計基礎知識程式設計
- Netty粘包&半包解決方案Netty
- Python基礎知識架構Python架構
- socket的半包,粘包與分包的問題
- 《java程式設計基礎》java的基礎知識(三)Java程式設計
- java nio解決半包 粘包問題Java
- 計算機網路——基礎知識(一)計算機網路
- 網路安全基礎知識
- java nio訊息半包、粘包解決方案Java
- Docker網路配置基礎知識Docker
- Java併發程式設計——基礎知識(二)Java程式設計
- Java併發程式設計——基礎知識(一)Java程式設計
- 程式設計必備基礎 計算機組成原理+作業系統+計算機網路,計算機基礎——更適合程式設計師的程式設計必備基礎知識作業系統計算機網路程式設計師
- 架構設計之一——基礎架構架構
- WEB網路滲透的基礎知識Web
- [雲原生微服務架構](十)微服務架構的基礎知識微服務架構
- 軟體設計師:程式設計語言基礎知識程式設計
- 私有云基礎架構設計:儲存、網路、計算、安全和應用的設計最佳實踐及案例架構
- 大規模C++程式設計 -- 基礎知識C++程式設計
- NOI Linux 基礎知識與程式設計環境Linux程式設計
- Java 程式設計知識列表與系統架構演化Java程式設計架構
- 網路營銷的基礎知識瞭解
- 【譯】給小白準備的Web架構基礎知識Web架構
- 程式基礎知識
- 系統架構基礎知識入門指南-下架構
- 系統架構基礎知識入門指南-上架構
- 談談網路協議 – 基礎知識協議
- 好程式設計師前端教程CSS基礎知識點程式設計師前端CSS
- 第七章——程式設計語言基礎知識程式設計
- 《圖解雲端計算架構:基礎設施和API》中的網址圖解架構API
- 微服務架構 spring boot 那些最基礎的知識點微服務架構Spring Boot
- Lustre架構介紹的閱讀筆記-基礎知識架構筆記
- 一些關於網路的基礎知識
- 遊戲基礎知識——下位文明的設計遊戲