栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

protobuf与grpc

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

protobuf与grpc

protobuf是一种编解码协议,支持多种语言,比如go,python,c++,java,javascript等,效率比json更高,但是没有json那么易于理解。
安装编译工具:
截至到发文时间已更新至v3.18.0,下载位置:github链接

然后将压缩包解压,再将bin目录设置到$PATH环境变量下即可
插件此时还不支持golang,去grp-gateway按照提示安装:

proto文件格式(经常变动,以github为准)
syntax = "proto3";
package coolcar;
option go_package="coolcar/proto/gen/go;trippb";

message Trip {
    string start = 1;
    string end = 2;
    int64 duration_sec = 3;
    int64 fee_cent = 4;
}
生成xx.pb.go文件

(命令经常变动,以github为准)
将当前目录下的proto文件编译到./gen/go中,生成序列化相关文件

protoc -I . 
--go_out ./gen/go --go_opt paths=source_relative trip.proto

如果需要生成序列化和rpc文件,执行命令

 protoc -I . 
	--go_out ./gen/go/ --go_opt paths=source_relative 
    --go-grpc_out ./gen/go/ --go-grpc_opt paths=source_relative 
    trip.proto
编解码的具体使用
package main

import (
	trippb "coolcar/proto/gen/go"
	"fmt"

	"google.golang.org/protobuf/proto"
)

func main() {
	trip := trippb.Trip{
		Start: "abc",
		End: "def",
		DurationSec: 3600,
		FeeCent: 10000,
	}
	b,err := proto.Marshal(&trip)
	if err != nil {
		return
	}
	fmt.Println(b)
	var bb trippb.Trip
	proto.Unmarshal(b,&bb)
	fmt.Println(&bb)
}

我们知道grpc接口是无法被restful风格的前端调用的,使用grpc的命令可以帮助我们完成接口的转换:
转换前需要定义yaml文件:示例

type: google.api.Service
config_version: 3

http:
  rules:
  - selector: coolcar.TripService.GetTrip
    get: /trip/{id}

输入以下命令会得到trip.pb.pw.go文件

protoc -I . --grpc-gateway_out ./gen/go 
    --grpc-gateway_opt paths=source_relative 
    --grpc-gateway_opt grpc_api_configuration=trip.yaml 
    trip.proto

未完待续,grpc最大的问题就是频繁更新,并且没有什么中文文档

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/275730.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号