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