当前位置:   article > 正文

c++以及golang基于protobuf进行简单通讯【c++与golang】【项目研究】_golang protobuf

golang protobuf

文章目录

  • 前言
  • 一、C++和Go语言都可以对protobuf进行操作
  • 二、protobuf编写与生成
    • 1、protobuf格式
    • 2、protobuf的编写
    • 2、两种语言的生成
  • 三、c++与go语言操作protobuf不同点
  • 四、c++与go语言基于protobuf进行网络通信
    • 1、go语言编写服务提供者
    • 2、c++服务调用者
  • 总结


前言

当我们需要在不同的编程语言之间进行通讯时,通常会遇到数据格式不兼容的问题。在这种情况下,使用数据序列化工具就成为了一种非常有效的解决方案。Google 推出的 Protocol Buffers(简称 protobuf)就是一种非常常用的数据序列化工具,它可以帮助我们快速实现跨语言、跨平台的数据传输等应用。
C++ 和 Go 是两种常用的编程语言本文将介绍如何利用 protobuf 实现 C++ 和 Go 语言之间的通讯。为微服务框架打基础。

一、C++和Go语言都可以对protobuf进行操作

Protocol Buffers 是一种轻巧高效的数据序列化工具,通过将结构化数据编码为二进制格式的消息,从而实现方便地进行数据交换和存储,并能够在不同的语言和平台间进行数据互通。因此利用 protobuf 实现 C++ 和 Go 语言之间的通讯是完全可行的,只要共同采用相同的消息格式定义,并通过相应语言的protobuf库进行序列化和反序列化

与其他序列化方式相比,protobuf 有更高的性能和更小的数据体积,因此广泛应用于 Google 内部以及众多开源项目中。
除了基础的序列化功能,Protobuf 还提供了其他高级特性,如扩展、注释、默认值、嵌套类型、枚举等,使其更加灵活、易用。

总之,protobuf 是一种优秀的数据序列化工具,可帮助开发者快速实现跨语言、跨平台的数据传输等应用。

二、protobuf编写与生成

1、protobuf格式

首先是声明protobuf的版本,以及代码所在的包(对于C++来说是namespace),如果需要生成服务类以及rpc方法描述就需要配置cc_generic_services。

syntax = "proto3"; // 声明了protobuf的版本

package fixbug; // 声明了代码所在的包(对于C++来说是namespace)

// 定义下面的选项,表示生成service服务类和rpc方法描述,
option cc_generic_services = true;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

定义数据,可以定义嵌套类型,枚举以及数组等等类型

message ResultCode
{
   
    int32 errcode = 1;
    bytes errmsg = 2;
}
// 数据   列表   映射表
// 定义登录请求消息类型  name   pwd
message LoginRequest
{
   
    bytes name = 1;
    bytes pwd = 2;
}
// 定义登录响应消息类型
message LoginResponse
{
   
    ResultCode result = 1;
    bool success = 2;
}

message GetFriendListsRequest
{
   
    uint32 userid = 1;
}
message User
{
   
    bytes name = 1;
    uint32 age = 2;
    // 枚举
    enum Sex
    {
   
        MAN = 0;
        WOMAN = 1;
    }
    Sex sex = 3;
}
message GetFriendListsResponse
{
   
    ResultCode result = 1;
    repeated User friend_list = 2;  // 定义了一个列表类型
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

定义描述rpc方法的类型 :

service UserServiceRpc
{
   
    rpc Login(LoginRequest) returns(LoginResponse);
    rpc GetFriendLists(GetFriendListsRequest) returns(GetFriendListsResponse);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2、protobuf的编写

syntax = 
    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/876732
    推荐阅读
    相关标签
      

    闽ICP备14008679号