我正在参与掘金创作者训练营第5期,点击了解活动详情
Protobuf介绍
Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。所以很适合做数据存储和为不同语言,不同应用之间互相通信的数据交换格式,只要实现相同的协议格式,即后缀为proto文件被编译成不同的语言版本,加入各自的项目中,这样不同的语言可以解析其它语言通过Protobuf序列化的数据。
Protobuf的优势:
- 序列化后体积比JSON和XML小,适合网络传输
- 序列化反序列化速度快,比JSON的处理速度快
Protobuf官方工程主页上显示的已支持的开发语言多达10种,分别有:C++、Java、Python、Objective-C、C#、JavaNano、Ruby、Go、PHP,基本上主流的语言都已支持。
语言 | github插件地址 | |
---|---|---|
C++ (include C++ runtime and protoc) | github.com/protocolbuf… | |
Java | github.com/protocolbuf… | |
Python | github.com/protocolbuf… | |
Objective-C | github.com/protocolbuf… | |
C# | github.com/protocolbuf… | |
PHP | github.com/allegro/php… | |
Go | github.com/protocolbuf… |
常见数据交互格式对比
- JSON (JavaScript Object Notation):一般用于WEB项目中,因为浏览器对JSON格式的数据支持非常好,大部分编程语言有很多内建函数支持,而且JSON几乎支持所有编程语言。
- XML:XML在WebService中的应用比较多,相比于JSON,它的数据更加冗余,因为需要成对的闭合标签,而JSON使用了键值对的方式,不仅压缩了一定的数据空间,同时也有更好的可读性。
- Protobuf:谷歌公司新开发的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为Protobuf是二进制数据格式,需要编码和解码。数据本身不具有可读性,因此只能反序列化得到可读数据。
安装
Mac 安装,使用brew命令进行protobuf安装默认安装最新的版本。
brew install protobuf
brew install protoc-gen-go
查看protoc版本
protoc --version
安装 Go 语言的插件
配置
vim ~/.bash_profile
export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
source ~/.bash_profile
vscode 插件
插件商场中搜索这个
第一个文件
hello.proto
syntax = "proto3";
import "google/protobuf/any.proto";
package hello;
option go_package = "proto/gen/go";
message HelloReq {
string name = 1;
}
message HelloResp {
int32 code = 1;
string greet = 2;
google.protobuf.Any details = 3;
}
service HelloService {
rpc Greet(HelloReq) returns (HelloResp);
}
初始化项目
go mod init example
protoc --go_out=. hello.proto
生成 hello.pb.go
main.go
package main
import (
"fmt"
hello "example/proto/gen/go"
)
func main() {
req := &hello.HelloReq{
Name: "hello",
}
fmt.Println(req.String())
}
控制输出
name:”hello”
今天的文章Protobuf通信协议分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/23027.html