【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )
文章目錄
- 一、TCP 粘包和分包
- 二、TCP 粘包和分包解決方案
- 三、客戶端 Android 應用使用 Protobuf
- 四、服務器端 Java 服務器使用 Protobuf
- 五、參考資料
一、TCP 粘包和分包
TCP 傳輸中的 粘包 和 分包 情況 :
分包 : 發(fā)送的數據量過大 , 大于 TCP 發(fā)送緩沖區(qū)的剩余空間 , 則產生分包 ; 發(fā)送的數據量大于 TCP 最大報文長度 , 也會產生分包 ;
粘包 : 發(fā)送的數據量過小 , 小于 TCP 發(fā)送緩沖區(qū)剩余空間大小 , TCP 機制會將多次寫入緩沖區(qū)的數據 , 一次性發(fā)送出去 , 這樣就產生了粘包的情況 ; 接收端如果沒有及時讀取接收緩沖區(qū)中的數據 , 也會造成粘包情況 ;
TCP 開發(fā)中 , 粘包和分包是必然出現的 , 無法避免 ;
二、TCP 粘包和分包解決方案
包頭定義長度 : 定義數據包的包頭信息 , 在包頭中定義數據包長度 , 這樣就知道當前包的大小 , 接收到數據包以后 , 就可以知道該數據報是否是完整的包 , 是否有粘包 , 分包的情況 ;
數據包首尾邊界 : 在數據包前后加上包頭標識 和 包尾標識 , 為數據包添加邊界 ;
三、客戶端 Android 應用使用 Protobuf
參考 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 ) 博客進行開發(fā) ;
四、服務器端 Java 服務器使用 Protobuf
編寫 Java 服務器端軟件 , 使用 eclipse 或 IntelliJ IDEA 開發(fā)環(huán)境 , 將 Android Studio 中使用的 Protobuf 源文件拷貝到服務器端環(huán)境中 , 使用 protoc 進行手動編譯 ;
【Android Protobuf 序列化】Protobuf 使用 ( protoc 編譯器簡介 | 下載 protoc 編譯器 | 使用 protoc 編譯器編譯 .proto 源文件 )
也可以參考 Protobuf Java 語言對應用法 : https://developers.google.com/protocol-buffers/docs/javatutorial 文檔 , 使用 Gradle 插件進行自動編譯 ;
服務器端軟件開發(fā)參考
BIO 網絡編程參考 : 【Java 網絡編程】TCP 數據傳輸示例 ( 客戶端參數設置 | 服務器端參數設置 | ByteBuffer 存放讀取數據類型 )
NIO 網絡編程參考 : 【Netty】NIO 網絡編程 聊天室案例
Netty 網絡編程參考 : 【Netty】Netty 入門案例分析 ( Netty 模型解析 | Netty 服務器端代碼 | Netty 客戶端代碼 )
懶得寫了 , 就這樣吧 , 都超級簡單的原理 ;
五、參考資料
Protobuf 參考資料 :
-
Protobuf 官網主頁 : https://developers.google.com/protocol-buffers
-
Protobuf 語法指南 : https://developers.google.com/protocol-buffers/docs/proto
-
Protobuf Java 語言對應用法 : https://developers.google.com/protocol-buffers/docs/javatutorial
-
Protobuf 下載地址 : https://developers.google.com/protocol-buffers/docs/downloads
-
Protobuf 源碼地址 : https://github.com/protocolbuffers/protobuf
-
Protobuf 發(fā)布版本下載地址 : https://github.com/protocolbuffers/protobuf/releases
-
protobuf-gradle-plugin 項目地址 : https://github.com/google/protobuf-gradle-plugin
博客源碼 :
- GitHub 地址 : https://github.com/han1202012/Protocol_Buffers
- CSDN 快照 :
總結
以上是生活随笔為你收集整理的【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Android Protobuf 序列
- 下一篇: 【错误记录】p7zip 交叉编译 And