Protobuf通信协议

Protobuf通信协议我正在参与掘金创作者训练营第5期,点击了解活动详情 Protobuf介绍 Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数

我正在参与掘金创作者训练营第5期,点击了解活动详情

Protobuf介绍

Protobuf (Protocol Buffers) 是谷歌开发的一款无关平台,无关语言,可扩展,轻量级高效的序列化结构的数据格式,用于将自定义数据结构序列化成字节流,和将字节流反序列化为数据结构。所以很适合做数据存储和为不同语言,不同应用之间互相通信的数据交换格式,只要实现相同的协议格式,即后缀为proto文件被编译成不同的语言版本,加入各自的项目中,这样不同的语言可以解析其它语言通过Protobuf序列化的数据。

Protobuf的优势:

  • 序列化后体积比JSON和XML小,适合网络传输
  • 序列化反序列化速度快,比JSON的处理速度快

Protobuf官方工程主页上显示的已支持的开发语言多达10种,分别有:C++、Java、Python、Objective-C、C#、JavaNano、Ruby、Go、PHP,基本上主流的语言都已支持。

工程主页:github.com/52im/protob…

语言 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…

常见数据交互格式对比

  1. JSON (JavaScript Object Notation):一般用于WEB项目中,因为浏览器对JSON格式的数据支持非常好,大部分编程语言有很多内建函数支持,而且JSON几乎支持所有编程语言。
  2. XML:XML在WebService中的应用比较多,相比于JSON,它的数据更加冗余,因为需要成对的闭合标签,而JSON使用了键值对的方式,不仅压缩了一定的数据空间,同时也有更好的可读性。
  3. Protobuf:谷歌公司新开发的一种数据格式,适合高性能,对响应速度有要求的数据传输场景。因为Protobuf是二进制数据格式,需要编码和解码。数据本身不具有可读性,因此只能反序列化得到可读数据。

安装

Mac 安装,使用brew命令进行protobuf安装默认安装最新的版本。

brew install protobuf
brew install protoc-gen-go

查看protoc版本

protoc --version

图片.png

安装 Go 语言的插件

github.com/grpc-ecosys…

图片.png

配置

vim ~/.bash_profile
export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
source ~/.bash_profile

vscode 插件

插件商场中搜索这个

图片.png

第一个文件

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

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注