从零开始实现一套简单RPC协议(一):protobuff安装及使用 ...
前言这学期计网的期末大作业要我们自己实现一套RPC协议,还要体现工作量......所以我寻思着,要不写几篇文章记录一下?嗯,就这么定了。
今天操作系统写的我头昏眼花,检查了四小时的bug最后发现其实一开始就是对的,我整个人裂开......哎,还是先来看看计网的大作业吧。
安装
首先声明本人打算用java来实现RPC协议,因此接下来的安装过程针对的是IDEA的,其他IDE的安装过程应该是类似的。
1.下载protobuf编译器
下载地址:protoc-3.20.1-win64.zip
下载解压成功后,需要将bin文件夹路径添加到环境变量中,如下图所示。
http://pic1.zhimg.com/v2-4a05b940ac5760031c26dcdeb5daefc8_r.jpg
2.下载protobuf解释器
下载地址:protobuf-java-3.20.1.zip
3.在IDEA中安装插件
需要安装这两个插件,菜单栏->File->settings->plugins,然后直接输入插件名install就可以
4.配置Maven
新建maven项目,在pmo.xml中添加如下依赖项
<dependencies>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java</artifactId>
<version>3.20.1</version>
</dependency>
<dependency>
<groupId>com.google.protobuf</groupId>
<artifactId>protobuf-java-util</artifactId>
<version>3.20.1</version>
</dependency>
</dependencies>
5.配置GenProtobuf
菜单栏->Tools->Configure GenProtobuf,配置地址
http://pic1.zhimg.com/v2-25ee8c61a25d6184b770c2803af943fc_r.jpg
使用
1.编写一个简单的proto文件
syntax = &#34;proto3&#34;;
option java_package=&#34;learnProto&#34;;
option java_outer_classname=&#34;MyTest&#34;;
message Data {
int32 id = 1;
optional string name = 2;
optional string email = 3;
}
2.编译proto
右键,选择“quick gen protobuf rules”,进行编译
http://pic4.zhimg.com/v2-789c75f5346714d395cf5d0fe3f0e3ab_r.jpg
编译成功,MyTest即是test.proto生成的java类
http://pic1.zhimg.com/v2-5ff4ed3a79a1af9c4c56656e7d0d7844_r.jpg
3.测试
编写代码测试一下生成的java文件其序列化和反序列化功能,如果可以正常运行并解析正确,说明操作无误。
package learnProto;
import com.google.protobuf.InvalidProtocolBufferException;
import learnProto.MyTest.*;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
convertProto(123);
}
public static void convertProto(int value) {
//1.通过build创建消息构造器
MyTest.Data.Builder dataBuilder = MyTest.Data.newBuilder();
//2.设置字段值
dataBuilder.setId(value);
//3.通过消息构造器构造消息对象
MyTest.Data data = dataBuilder.build();
//4.序列化
byte[] bytes = data.toByteArray();
System.out.println(value+&#34;序列化后的数据:&#34; + Arrays.toString(bytes)+&#34;,字节个数:&#34;+bytes.length);
//5.反序列化
try {
MyTest.Data parseFrom = MyTest.Data.parseFrom(bytes);
System.out.println(&#34;还原后的数据=&#34;+parseFrom.getId());
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}运行结果:
123序列化后的数据:,字节个数:2
还原后的数据=123
到此为止protobuff就算装好啦。
参考文献
gRPC 官方文档中文版_V1.0 (oschina.net)
【Protobuf专题】(一)基于IDEA实现Proto一站式编辑及编译 - 知乎 (zhihu.com)
Overview|Protocol Buffers|Google Developers
页:
[1]