Google Protobuf 框架基础

前言基础知识:

RMI:remote method Invocation  远程方法调用 只针对Java 底层数据通过socket进行传输

A机器上的方法,通过B机器来调用 调用的方式需要序列化成字节码,然后再进行反序列化

Client :stub 桩

Server :skeleton  骨架

序列化(将对象转换成字节编码过程)与反序列化(将字节转换成对象 解码)也叫做:编码与解码

RPC:remote procedure call  :远程过程调用,很多RPC框架都是跨语言的,(服务器代码是Python 而客户端java)

使用步骤

  1. 定义接口说明文件(idl):描述了对象(结构体)、对象成员,接口方法等一系列信息
  2. 通过RPC框架所提供的编译器,将接口说明文件编译成具体语言文件
  3. 在客户端与服务器端分别引入RPC编译器所生成的文件,即可调用本地方法一样调用远程方法。

Webservice 也可以当成是一个RPC来看,只不过效率没RPC高。

RPC基于socket 而webservice基于http,效率没有socket高。

接口说明文件;定义数据:类似java中的类

Required:必须的   

Optional:可选的

  string .. 代表数据类型  name =1 1:代表的是标识,顺序

构造出消息对象并写入到流中

从流中反序列化出来:

开发流程:

*  从Google protobuf首页进入到download页面

 

*进入到protobuf的GitHub托管中,选择安装protobuf编译器

然后选择指定系统的zip包

下载好之后解压缩之后,编译器在bin目录下

将bin目录放置到环境变量path下:

在cmd中输入protoc即可执行 显示如下

然后再下载一个针对特定语言的压缩包:似乎没有用到

然后需要运行时依赖

这里的话项目中可以通过gradle进行管理

自此:就已经将Google protobuf的开发环境和编译环境配置完毕

 

使用:

项目中创建文件.proto结构文件

student.proto

syntax="proto2";

//文件特性
package com.test.protobuf;
option optimize_for = SPEED; //加快解析速度 默认是SPEED
option java_package = "com.test.protobuf";
option java_outer_classname = "DataInfo";

message Student{
    required string name = 1;
    optional int32 age = 2;
    optional string address = 3;
}

执行命令在项目中生成对应的目标class文件

protoc --java_out=src/main/java  src/protobuf/student.proto

第一个目录是生成目录,第二个目录是proto文件的目标目录

然后就会在目标目录下生成这个class文件

编写测试类测试生成的class类进行序列化与反序列化操作

public class ProtobufTest {

    public static void main(String[] args) throws InvalidProtocolBufferException {
        //message 只读  只有build 可读写
        DataInfo.Student student =  DataInfo.Student.newBuilder().
                setName("张三").setAge(20).setAddress("湖南").build();
        //将对象序列化成字节数组
        byte[] student2ByteArray = student.toByteArray();

        //再将字节数组反序列化成对象
        DataInfo.Student student1 = DataInfo.Student.parseFrom(student2ByteArray);
        System.out.println(student1.getName());
        System.out.println(student1.getAge());
        System.out.println(student1.getAddress());
    }
}

自此,使用protobuf完成基础的序列化与反序列化操作

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf-rpc是一种基于protobuf的远程方法调用(RPC)框架。它提供了服务器端和客户端的实现,其中服务器端仅支持Java,而客户端则支持Objective-C和Java。RPC是一种封装了网络协议和序列化、反序列化功能的通信框架,而protobuf-rpc使用protobuf实现了序列化和反序列化的功能。通过protobuf-rpc,客户端可以像调用本地方法一样调用远程接口方法,实现了透明调用机制,让使用者不必显示区分本地调用和远程调用。这使得开发人员可以很方便地在分布式系统中进行远程方法调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [protobuf-rpc:protobuf-rpc 是一个基于 Google ProtocolBuffer 的 RPC 框架。 目前 protobuf-rpc 支持 ...](https://download.csdn.net/download/weixin_42123296/19257793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [protobuf+RPC技术](https://blog.csdn.net/weixin_27015375/article/details/114350163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python如何通过protobuf实现rpc](https://download.csdn.net/download/weixin_38599545/13771570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值