初识传输协议Protocol Buffer

文章目录

    • 1 主流的传输协议
    • 2 protobuf环境安装
        • 2.1 protobuf编译工具的安装
        • 2.2 protobuf的go语言插件安装
    • 3 使用protobuf开发的过程⭐️
    • 4 使用protobuf协议编程

1 主流的传输协议

  • json
    优势:可读性强;
    劣势:编解码比较耗时;
    开发场景:常用于前后端的数据传输

  • xml
    优势:基于标签的
    劣势:冗余
    开发场景:前端/网页

  • protobuf
    优势:

    1、序列化后的体积相比于json和xml很小,适合网络传输;
    2、支持跨平台的多语言;
    3、消息格式升级和兼容性还不错;
    4、序列化反序列化速度很快,快于json的处理速度;

    劣势

    1、应用范围不够广(相比于xml和json);
    2、二进制格式导致可读性差;
    3、缺乏自描述;

2 protobuf环境安装

2.1 protobuf编译工具的安装

  1. 下载protobuf

    cd $GOAPTG/src
    git clone https://github.com/protobuffers/protobuf.git
    
  2. 或者直接将压缩包拖入后解压

    unzip protobuf.zip
    
  3. 安装依赖包

    sudo apt-get install autoconf automake libtool curl make g++ unzip libffi-dev -y
    
  4. 进入目录

    cd protobuf/
    
  5. 自动生成configure配置文件

    ./autogen.sh
    
  6. 配置环境

    ./configure
    
  7. 编译源代码

    make
    
  8. 安装

    sudo make install
    
  9. 刷新共享库

    sudo idconfig
    
  10. 成功后使用命令测试

    protoc --version
    

2.2 protobuf的go语言插件安装

由于protobuf并没有直接支持支持go语言需要我们手动安装插件

  1. 获取proto包(Go语言的proto API接口)

    go get -v -u github.com/golang/protobuf/proto
    go get -v -u github.com/golang/protobuf/protoc-gen-go
    
  2. 编译

    cd $GOPATH/src/pkg/mod/google.golang.org/[email protected]/cmd/protoc-gen-go
    go build
    
  3. 将生成的protoc-gen-go可执行文件,放在对应目录下

    sudo cp protoc-gen-go /usr/local/bin
    

3 使用protobuf开发的过程⭐️

  1. 创建一个.proto文件(定义一些message格式)
  2. 将.proto文件进行编译,生成对应的.go文件
    protoc --proto_path=IMPORT_PATH --go_out=DST_DIR path/to/file.proto
    
    • –proto_path:指定了.proto文件导包的路经,可以有多个,如果忽略则默认当前目录;
    • –go_out:指定了生成的go语言代码文件放入的文件夹;
    • 允许使用protoc --go_out=./ *.proto的方式一次性编译多个.proto文件;
    • 编译时,protobuf编译器会把.protobuf文件编译成.pd.go文件;
    • 得到的.pd.go文件是不可以修改的
    • 使用得到的.pd.go文件进行开发

4 使用protobuf协议编程

  1. 定义一个go的protobuf对应的结构;
  2. proto.Marshal进行编码序列化 得到二进制数据;
  3. 将data进行运输或者发送给对方;
  4. 对方收到data数据,将data通过proto.UnMarshal得到结构体数据;

你可能感兴趣的:(golang)