现在我们都知道,rpc的三要素:IO模型,线程模型,然后就是数据交互模型,即我们说的序列化和反序列化,现在我们来看一下压缩比率最大的二进制序列化方式——Protobuffer,而且该方式是可以跨语言的,几乎大部分的语言都可以互相序列化和反序列化。
要使用Protobuffer,需要先进行安装。因为本人使用的是mac,所以我使用的是.tar.gz的二进制压缩文件。
其下载地址为https://github.com/protocolbuffers/protobuf/releases/tag/v3.5.0
下载完成后,依次执行以下命令
tar -xzvf protobuf-all-3.5.0.tar.gz
cd protobuf-3.5.0/
./configure
make
make check
make install
安装需要的时间比较长,需要耐心等待,安装完成后,执行
admindeMacBook-Pro:protobuf-3.5.0 admin$ protoc --version
libprotoc 3.5.0
有显示红色字样,表示安装成功。
现在我们来写一个hello world的样例
新建一个player.proto的文件
touch player.proto
vim player.proto
添入如下代码
option java_package = "com.guanjian.proto"; //此处为生成java文件的包名
option java_outer_classname = "PlayerModule"; //生成Java的类名
message PBPlayer{ //Protobuffer的类声明,会生成java的内部类
required int64 playerId = 1; //required为必须字段,int64表示java的long类型,= 1这个1表示字段键名,每个字段的键名不能重复
required int32 age = 2; //int32表示java的int类型
required string name = 3; //string表示java的String
repeated int32 skills = 4; //repeated int32表示Java的List<Integer>
}
message PBResource{
required int64 gold = 1;
required int32 energy = 2;
}
保存后,输入命令
protoc ./player.proto --java_out=./
会在当前文件夹生成com/guanjian/proto的三个文件夹
cd com/guanjian/proto后,可以看到我们生成的java文件
admindeMacBook-Pro:proto admin$ ls PlayerModule.java
这里java文件里面的内容非常的多,也非常复杂。