Protobuf
文章平均质量分 73
Google Protobuf相关知识
xupeng1644
道阻且长,行则将至!
展开
-
Linux下编译protobuf
下载下载地址为https://github.com/protocolbuffers/protobuf。以Protocol Buffers v3.17.0为例,下载界面版本比较多:需要编译的是C++版本,可以选择protobuf-cpp-3.17.0.tar.gz,也可以选择Source code (tar.gz)。编译解压缩后,目录结构如下:进入cmake文件夹,执行命令cmake .,然后执行命令cmake --build .,最后执行make install DESTDIR=安装目录(原创 2022-01-20 12:03:12 · 4762 阅读 · 0 评论 -
Proto3 Any与Oneof(转载)
Any消息类型允许您将消息作为嵌入类型,而不需要它们 .proto定义。Any包含任意序列化的消息(字节),以及一个URL,该URL充当该消息的全局唯一标识符并解析为该消息的类型。要使用Any类型,你需要导入google/protobuf/any.proto。import "google/protobuf/any.proto";message ErrorStatus { string message = 1; repeated google.protobuf.Any details = 2;转载 2021-06-23 11:24:57 · 4920 阅读 · 0 评论 -
一个基于protobuf的极简RPC
前言RPC采用客户机/服务器模式实现两个进程之间的相互通信,socket是RPC经常采用的通信手段之一。当然,除了socket,RPC还有其他的通信方法:http、管道。。。网络开源的RPC框架也比较多,一个功能比较完善的RPC框架代码比较多,如何快速的从这些代码盲海中梳理清楚主要脉络,对于初学者来说比较困难,本文介绍之前自己实现的一个C++极简版的RPC框架(https://github.com/goyas/goya-rpc),代码只有100多行,希望尽量用少的代码来描述框架以减轻初学者的学习负担,同时转载 2020-06-16 20:04:48 · 1677 阅读 · 0 评论 -
Protobuf C++类中成员函数GetCachedSize()与ByteSize()的区别
GetCachedSize()取的是调用ByteSize()之后保存的值。如果调用GetCachedSize()时还未调用过ByteSize(),返回0。#include "common.pb.h"#include <iostream>int main(){ TestProtocol one; one.set_data1(1); one.set_data2(2); ...原创 2020-03-26 00:04:05 · 4921 阅读 · 0 评论 -
protoc 生成C++代码
1 安装protoc2 把protoc.exe增加到环境变量path,这样方便运行protoc3 书写proto文件。eg:test.protosyntax = "proto2";message Book{ optional string name = 1; optional int32 pages = 2; optional float price = 3;...转载 2020-03-25 10:22:54 · 2591 阅读 · 0 评论 -
proto3与proto2的区别
总结:proto3比proto2支持的语言更多,语法更简洁。去掉了复杂的语法和特性,更强调约定而弱化语法。1在第一回非空白非注释行,写明语法:syntax = “proto3”;2 字段规则移除了"required",所有非repeated的字段都默认为optional(可选的)在proto2中required也是不推荐使用的。proto3直接从语法层面移除了required规则。3 “r...转载 2020-03-13 15:47:33 · 2682 阅读 · 0 评论 -
Protocol Buffer 序列化原理大揭秘
前言习惯用 Json、XML 数据存储格式的你们,相信大多都没听过Protocol BufferProtocol Buffer 其实 是 Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json、XML 真的强!太!多!由于 Google出品,我相信Protocol Buffer已经具备足够的吸引力今天,我将讲解为什么Protocol Buffer的性能如此...转载 2020-03-13 14:06:15 · 1590 阅读 · 0 评论 -
protobuffer中string和bytes类型
博客搬家,原地址:https://langzi989.github.io/2017/06/07/protoBuffer中string与byte类型区别/从上一节protobuffer的介绍中我们知道字符串类型在protobuffer中有string和bytes两种类型,那这两种类型有什么区别呢,什么时候用string,什么时候用bytes。在C++中两种类型分别对应的是什么类型.下面将揭开迷雾...转载 2019-12-04 12:43:10 · 4650 阅读 · 0 评论 -
Protobuf import文件导入其他proto
有三个proto文件BaseProto.proto、MessageProto.proto和ServerProto.proto。文件内容MessageProto.proto:syntax = "proto3";package GameProto;message MsgWeaponSkillData // 神兵觉醒数据{ int32 skillID = 1; // 技能ID int3...原创 2019-11-13 12:50:51 · 6923 阅读 · 0 评论 -
Protobuf 判断某个值是否在一个枚举值中
判断某个值是否在一个枚举值中proto文件中有如下定义:enum EquipSlotID // 装备特定位置{ ESI_ARM = 0; // 武器 ESI_GEM = 1; // 宝物 ESI_CLOTHES = 2; // 衣服 ESI_BELT = 3; // 腰带 ESI_JEWELRY = 4; // 饰品}以前的做法是:std::...原创 2019-11-07 11:35:49 · 3311 阅读 · 0 评论 -
Protobuf3详细介绍
简介proto3语法定义一个 Message定义多个 message 类型定义变量类型分配Tag指定变量规则注释保留变量不被使用默认值定义枚举 Enumerations如何引用其他 proto 文件升级 proto 文件正确的姿势Any 的使用Oneof 的使用Maps 的使用Packages 的使用Options定义 Services简单RPC服...转载 2019-11-07 11:23:32 · 10379 阅读 · 5 评论 -
VS2015 编译Protobuf
protobuf的编译和使用,在windows平台上 0 准备工作 (1)下载protobufhttps://github.com/google/protobuf/releases下载的是cpp版本,选择当前最新版本即可(2)安装cmakehttps://cma...转载 2019-09-29 15:24:34 · 723 阅读 · 0 评论 -
c++ Protobuf中set_allocated引起的double free core dump
在c++中使用protobuf的时候,大多数元素,我们可以直接set_xxx,如果有嵌套进去一个对象,会有set_allocated_xxx的方法和mutable_xxx的方法。这里有一个坑。现象首先,看pb定义:package test;message a{required uint32 aa = 1;}message b{required a aaa = 1;}如果使用s...转载 2019-10-09 10:51:25 · 3289 阅读 · 2 评论