RabbitMQ的学习和模拟实现|Protobuf的介绍和简单使用

protbuf的介绍和简单使用

项目仓库:https://github.com/ffengc/HareMQ

protobuf的安装:README-cn.md#环境配置

基于Protobuf的一个小项目:基于protobuf和httplib的在线通讯录项目框架|Protobuf应用小项目

protobuf是什么

ProtoBuf(全称Protocol Buffer)是数据结构序列化和反序列化框架,它具有以下特点:

  • 语言无关、平台无关:即 ProtoBuf支持 Java、C++、Python 等多种语言,支持多个平台

  • 高效:即比 XML 更小、更快、更为简单

  • 扩展性、兼容性好:你可以更新数据结构,而不影响和破坏原有的旧程序

  • 编写.proto文件,目的是为了定义结构对象(message)及属性内容

  • 使用protoc编译器编译.proto 文件,生成一系列接口代码,存放在新生成头文件和源文件中

  • 依赖生成的接口,将编译生成的头文件包含进我们的代码中,实现对.proto文件中定义的字段进行设置和获取,和对 message 对象进行序列化和反序列化。

快速上手

contacts.proto定义如下。

proto 复制代码
syntax = "proto3";  // 声明语法版本
package contacts;   // 声明命名空间

// 结构化对象的描述
message contact {
    // 各个字段描述
    /* 字段类型 字段名 = 字段唯一编号 */
    uint64 sn = 1;
    string name = 2;
    float score = 3;
};

定义完成proto文件之后,就要让proto给我们生成对应的.h.cc了。

sh 复制代码
protoc  --cpp_out=. contacts.proto

这样就生成成功了。

cpp 复制代码
namespace contacts {
PROTOBUF_CONSTEXPR contact::contact(

这里的命名空间就是我们确定的package的名字。

那么如何调用和使用呢?

注意,使用的时候需要链接上去。

makefile

makefile 复制代码
test: main.cc contacts.pb.cc
	g++ -o $@ $^ -lprotobuf -std=c++11
.PHONY:clean
clean:
	rm -f test

main.cc

cpp 复制代码
int main() {
    contacts::contact conn;
    conn.set_sn(10001);
    conn.set_name("Sam");
    conn.set_score(60.5);

    std::string str = conn.SerializeAsString();
    // conn.SerializeToString(&str); // 一样的
    contacts::contact stu;
    bool ret = stu.ParseFromString(str);
    if (ret == false) // 反序列化失败
        assert(false);
    std::cout << stu.sn() << " " << stu.name() << " " << stu.score() << std::endl;
    return 0;
}

这就是一个基本的使用。

相关推荐
Brilliantwxx4 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
不怕犯错,就怕不做4 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
weixin_416667965 小时前
【无标题】
运维·服务器·网络
上海云盾-小余7 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
我命由我123459 小时前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime
Uncertainty!!10 小时前
Linux 主机无法完成校园网认证排查记录:从 DHCP、ARP 到 Portal 认证流程分析
linux·运维·服务器
其实防守也摸鱼10 小时前
权限提升与横向移动:从内网渗透到域控的完整技术图谱
运维·服务器·数据库·安全·github·copilot·渗透
mounter62510 小时前
突破零停机演进:Linux 内核 Live Update Orchestrator (LUO) 架构设计与热升级演进
linux·服务器·linux kernel·kernel·kho·luo
黑泽明*10 小时前
KVM虚拟化入门与热迁移实战
运维·服务器
波多利希最高礼仪的握力器10 小时前
安全复制SCP
linux·服务器·安全