【Android Protobuf 序列化】Protobuf 服务器与客户端通信 ( TCP 通信中使用 Protobuf )

2023-03-29 10:35:11 浏览数 (1)

文章目录

  • 一、TCP 粘包和分包
  • 二、TCP 粘包和分包解决方案
  • 三、客户端 Android 应用使用 Protobuf
  • 四、服务器端 Java 服务器使用 Protobuf
  • 五、参考资料

一、TCP 粘包和分包


TCP 传输中的 粘包 和 分包 情况 :

分包 : 发送的数据量过大 , 大于 TCP 发送缓冲区的剩余空间 , 则产生分包 ; 发送的数据量大于 TCP 最大报文长度 , 也会产生分包 ;

粘包 : 发送的数据量过小 , 小于 TCP 发送缓冲区剩余空间大小 , TCP 机制会将多次写入缓冲区的数据 , 一次性发送出去 , 这样就产生了粘包的情况 ; 接收端如果没有及时读取接收缓冲区中的数据 , 也会造成粘包情况 ;

TCP 开发中 , 粘包和分包是必然出现的 , 无法避免 ;

二、TCP 粘包和分包解决方案


包头定义长度 : 定义数据包的包头信息 , 在包头中定义数据包长度 , 这样就知道当前包的大小 , 接收到数据包以后 , 就可以知道该数据报是否是完整的包 , 是否有粘包 , 分包的情况 ;

数据包首尾边界 : 在数据包前后加上包头标识 和 包尾标识 , 为数据包添加边界 ;

三、客户端 Android 应用使用 Protobuf


参考 【Android Protobuf 序列化】Protobuf 使用 ( Protobuf 序列化 | Protobuf 反序列化 ) 博客进行开发 ;

四、服务器端 Java 服务器使用 Protobuf


编写 Java 服务器端软件 , 使用 eclipse 或 IntelliJ IDEA 开发环境 , 将 Android Studio 中使用的 Protobuf 源文件拷贝到服务器端环境中 , 使用 protoc 进行手动编译 ;

【Android Protobuf 序列化】Protobuf 使用 ( protoc 编译器简介 | 下载 protoc 编译器 | 使用 protoc 编译器编译 .proto 源文件 )

也可以参考 Protobuf Java 语言对应用法 : https://developers.google.com/protocol-buffers/docs/javatutorial 文档 , 使用 Gradle 插件进行自动编译 ;

服务器端软件开发参考

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 发布版本下载地址 : https://github.com/protocolbuffers/protobuf/releases
  • protobuf-gradle-plugin 项目地址 : https://github.com/google/protobuf-gradle-plugin

博客源码 :

  • GitHub 地址 : https://github.com/han1202012/Protocol_Buffers
  • CSDN 快照 :

0 人点赞