找回密码
 立即注册
查看: 292|回复: 0

从零开始实现一套简单RPC协议(一):protobuff安装及使用 ...

[复制链接]
发表于 2022-4-25 12:52 | 显示全部楼层 |阅读模式
前言

这学期计网的期末大作业要我们自己实现一套RPC协议,还要体现工作量......所以我寻思着,要不写几篇文章记录一下?嗯,就这么定了。
今天操作系统写的我头昏眼花,检查了四小时的bug最后发现其实一开始就是对的,我整个人裂开......哎,还是先来看看计网的大作业吧。
安装

首先声明本人打算用java来实现RPC协议,因此接下来的安装过程针对的是IDEA的,其他IDE的安装过程应该是类似的。
1.下载protobuf编译器
下载地址:protoc-3.20.1-win64.zip
下载解压成功后,需要将bin文件夹路径添加到环境变量中,如下图所示。



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,配置地址


使用

1.编写一个简单的proto文件
syntax = "proto3";
option java_package="learnProto";
option java_outer_classname="MyTest";

message Data {
  int32 id = 1;
  optional string name = 2;
  optional string email = 3;
}
2.编译proto
右键,选择“quick gen protobuf rules”,进行编译


编译成功,MyTest即是test.proto生成的java类


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+"序列化后的数据:" + Arrays.toString(bytes)+",字节个数:"+bytes.length);
        //5.反序列化
        try {
            MyTest.Data parseFrom = MyTest.Data.parseFrom(bytes);
            System.out.println("还原后的数据="+parseFrom.getId());
        } catch (InvalidProtocolBufferException e) {
            e.printStackTrace();
        }
    }
}运行结果:
123序列化后的数据:[8, 123],字节个数:2
还原后的数据=123
到此为止protobuff就算装好啦。
参考文献

gRPC 官方文档中文版_V1.0 (oschina.net)
【Protobuf专题】(一)基于IDEA实现Proto一站式编辑及编译 - 知乎 (zhihu.com)
Overview  |  Protocol Buffers  |  Google Developers

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-5-3 16:57 , Processed in 0.135155 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表