分布式项目学习笔记(一):protobuf 的安装以及使用

【protobuf入门学习(一)】 —— protobuf安装教程 protobuf介绍以及安装教程 阅读详情

一、概述

由于分布式需要在不同的主机之间进行通信,因此需要对信息进行打包。打包之后发送的数据称为“序列化”信息,接受方接收到序列化信息之后,需要进行“反序列化”得到结构化的信息。protobuf 正是提供了这两个过程的一个库。

二、protobuf 的安装

	1. 获取源码:https://github.com/google/protobuf
	2. 源码包中的src/README.md,有详细的安装说明,安装过程如下:

	1、解压压缩包:unzip protobuf-master.zip
	2、进入解压后的文件夹:cd protobuf-master
	3、安装所需工具:sudo apt-get install autoconf automake libtool curl make g++ unzip
	4、自动生成configure配置文件:./autogen.sh
	5、配置环境:./configure
	6、编译源代码(时间比较长):make
	7、安装:sudo make install
	8、刷新动态库:sudo ldconfig

三、功能的简单测试

我们可以编写简单的文件来测试protobuf 的功能:

1. 创建test.proto文件:

syntax = "proto3"; // 声明proto的版本

package fixbug; // 声明了代码所在的包

// 定义登录请求消息类型
message LoginRequest{
    bytes name = 1;
    bytes pwd = 2;
}

// 定义登录响应消息类型
message LoginRespone{
    int32 errcode = 1;
    bytes errmsg = 2;
    bool success = 3;
}

2. 对test.proto进行编译

这里编译的作用生成相对应的C++代码来给程序进行调用。命令:

protoc test.proto --cpp_out ./

其中,protoc 是编译命令,test.proto是文件名,./ 是指定了当前的路径

编译之后会增加两个文件 test.pb.cc 和 test.pb.h(忽略main.cc 和 a.out):
在这里插入图片描述

3. 使用main函数测试功能

#include <iostream>
#include <string>
#include "test.pb.h" // 引入之前生成的库

using namespace fixbug; // 解开命名空间


int main() {

    LoginRequest req;   // 创建对象
    req.set_name("zhang san");  // 设置
    req.set_pwd("123456");    	// 设置
	
	// 序列化为string
    std::string send_str;
    if (req.SerializeToString(&send_str)) {
        std::cout << send_str.c_str() << std::endl;
    }
	
	// 从string反序列化
    LoginRequest reqB;
    if (reqB.ParseFromString(send_str)) {
        std::cout << reqB.name() << std::endl;
        std::cout << reqB.pwd() << std::endl;
    }
    
    return 0;
}

3.1 编译

g++ main.cc test.pb.cc -lprotobuf // 注意一定要动态连接

3.2 运行

./a.out

3.3 输出结果

在这里插入图片描述

完成收工!!!

分布式网络通信框架(十五)——Mprpc项目总结 会一直阻塞下去),也就是指定的timeout时间内没有收到rpc 请求的响应,判断当前rpc 请求失败,此处为了实现高可用性,可以再尝试请求比如3 次,3 次都失败的话,可以从zookeeper 上查询还有没有其它主机提供同样的rpc 服务,然后重新向新主机发起请求,直到请求成功,如果所有提供该rpc 服务的主机都没有响应或已经没有其它主机提供该rpc 服务了,那么尝试3 次后,可以判定请求失败(确实有其它因素导致所有的服务器都挂掉了,这一般是严重的线上bug)。,封装了很好用的接口,之前只用过json。 阅读详情

相关推荐

FPGA之VGA转HDMI之编码模块的编写

VGA 图像信息到 HDMI 图像信息的转化需要对输入的 VGA 图像信息进行编码、并行串行转换、单端信号转差分信号、单沿采样转双沿采样。 其中,编码模块就是为了完成 VGA 图像数据 8b 转 10b 的编码。其结构框图如下所示: 图1 编码模块框图 图2 编码模块输入输出信号功能框图 图3 编码模块参考流程图 图4 编码模块参考流程图参数说明 下面我们依据HDMI官方手册中的流程图(图3)进行 HDMI 8b...

qq_51264805的博客 3023

Hello! protobuf——编译与安装(c++版)

Protocol Buffers是Google开发的一种平台无关,语言无关,可扩展的的序列化结构数据格式,类似与XML,但是比XML更小,更快,更简单。你只需要按照规则定义你需要的数据结构,然后通过专门的源代码生成工具就可以生成各种语言所需要的数据类文件。非常好用~ ...

wzw1609119742的博客 1万+

保姆级教程:在寒武纪MLU370上从零部署YOLOv5(附安全帽数据集)

本文提供在寒武纪MLU370上从零部署YOLOv5的保姆级教程,涵盖环境配置、模型迁移、安全帽数据集处理、训练优化及推理部署全流程。通过实战案例展示MLU370在目标检测任务中的高效性能,适合开发者快速掌握国产AI加速卡的应用技巧。

weixin_27419879的博客 189

源码安装protobuf

源码安装protobuf

qq_16740151的专栏 496

Unity游戏开发客户端面经——数据结构(初级)

Unity游戏开发客户端面经 之 数据结构篇

Sea3752的博客 1万+

【Maxwell16.0】实战指南:从DXF导入到MotorCAD联合仿真的关键技巧

本文详细解析了Maxwell 16.0与MotorCAD进行联合仿真的核心流程与关键技巧。重点阐述了从DXF模型导入、几何修复、一极一槽模型剪裁,到坐标系对齐、MotorCAD参数匹配及结果验证的全过程,旨在帮助工程师高效打通联合仿真链路,规避常见错误,提升电机设计效率。

weixin_29062865的博客 715

protobuf源码编译与安装

protobuf源码编译与安装1.下载protobuf源码git clone https://github.com/google/protobuf.git2.安装编译所需的依赖sudo yum install -y autoconf automake libtool curl make g++ unzip3.产生配置脚本./autogen.sh4.编译与安装$ ./configure --prefi

wenwenxiong的专栏 1万+

从Arduino IDE到Atmel Studio:ATmega328P开发的进阶之路

本文探讨了从Arduino IDE转向Atmel Studio进行ATmega328P开发的进阶路径。通过对比两者差异,详细介绍了Atmel Studio的环境配置、寄存器操作思维、烧录方法及高级调试功能,帮助开发者突破Arduino的封装限制,实现对单片机底层硬件的精细控制与性能优化,提升嵌入式开发的专业能力。

weixin_29193259的博客 122

protobuf安装与使用

更新系统软件包列表安装 Protocol Buffers 编译器和运行时库注:常见问题:缺少依赖解决依赖问题后重新安装即可显示版本。

AntigravityC的博客 920

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

半导体材料仿真:二维材料仿真_(1).二维材料的基本概念

在半导体材料仿真领域,二维材料因其独特的物理和化学性质而受到广泛关注。二维材料,也称为二维纳米材料,是指在二维空间(通常是平面)上具有原子级厚度的材料。这些材料的厚度通常在几个纳米甚至单个原子层的范围内,使得它们在电子、光学、热学和机械性能上表现出与传统三维材料显著不同的特性。本节将详细介绍二维材料的基本概念,包括它们的分类、结构、性质以及在半导体材料仿真中的应用。

2401_87715305的博客 1545

【Go | 从0实现简单分布式缓存】-5:使用Protobuf通信

本文为极客兔兔动手写分布式缓存GeeCache学习笔记。

theaipower的博客 7477

Codex 100个真实案例 - 全系列总结与Codex最佳实践全解析

历经100个案例的淬炼,我们终于来到了终点!本篇是整个系列的压轴之作——全面回顾100个案例的分类统计、提炼Codex使用的核心技巧和最佳实践、总结Prompt工程的精华要点、剖析常见错误及解决方案、展望AI编程的未来趋势,并为不同水平的读者规划学习路径。这不仅是一篇总结,更是一本Codex实战手册!

yueyeguzhuo的专栏 135

深入理解GeeCache项目:使用Protobuf优化分布式缓存通信

深入理解GeeCache项目:使用Protobuf优化分布式缓存通信 【免费下载链接】7days-golang 7 days golang programs from scratch (web framework Gee, distributed cache GeeCache, object relational map...

gitblog_00675的博客 386

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

基于muduo和protobuf的分布式网络通信框架

基于muduo和protobuf的分布式网络通信框架

yttt的博客 1615

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Go分布式缓存 使用 Protobuf 通信(day7)

Go分布式缓存 使用 Protobuf 通信(day7)

Harris-H的博客 706

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

protobuf、protobuf-c、protobuf-c-rpc在Linux(Ubuntu18.04)编译安装及交叉编译arm\aarch64版本

如下介绍c语言的protobuf+rpc的开源库protobuf-c和protobuf-c-rpc,其适合于嵌入式分布式场景,利用protobuf协议的可扩展性比较方便进行协议兼容升级,利用rpc接口的网络易用性,不需要再从头到尾实现一遍socket通信、通信接口设计,只需要实现C函数接口设计和开发以及利用proto设计好交互协议即可,并且具备一定的跨编程语言交互特性,每个具备联网能力的嵌入式设备都可作为rpc客户端和服务端,可以快速进行嵌入式设备业务组网开发(此外,还有一些适合于stm32的protobu

逍遥游的博客 1554

秋招项目ByteTalk —— 分布式集群的聊天系统

文章目录写在前面系统前置知识ByteTalk架构设计图ByteTalk架构 —— nginx反向代理负载均衡nginx 反向代理的配置ByteTalk架构 —— 服务器群(服务单元)ByteTalk 服务单元 —— 抽象服务节点:ProxyServiceByteTalk 抽象服务节点 —— 聊天处理服务器:ChatServerByteTalk 业务服务单元 —— 以登录、注册节点:UserService为例ByteTalk 架构缺陷参考文献 作者:shenmingik 邮箱:2107810343@qq.co

0 error(s) 3891

RPC分布式网络通信框架项目

RPC分布式网络通信框架项目详解

weixin_45029883的博客 2839

RPC分布式网络通信框架(一)—— protobuf的使用

rpc分布式网络框架

weixin_42690036的博客 3565

Protobuf 开源项目指南

Protobuf 开源项目指南 项目介绍 Protobuf(Protocol Buffers) 是Google开发的一种数据序列化协议(与XML、JSON类似),用于高效地序列化结构化数据。此开源项目由用户@chrisdew维护的一个分支版本,提供了一种灵活、高效且自动化的机制来定义数据结构和服务接口,然后在不同的语言之间进行通信。通过 Protobuf,开发者可以轻松地处理复杂的数据传输,而无需...

gitblog_01114的博客 358

[C++项目] Mprpc分布式网络通信框架

zookeeper中间件流程图。二进制存储占用字节数少,网络传输节省带宽资源。

sdadsa2132131的博客 916

简单的使用protobuf和protostuff

在我们的开发过程中,序列化是经常需要处理的问题,比如在做分布式访问数据时,或者是在做redis缓存存储数据时,如果我们涉及的知识面不够广的话,可能会简单的使用JDK的序列化,也即在需要序列化的类上implements Serializable接口去实现序列化,我想说的是这种方式在小系统中尚且可以用一用,如果是并发很大的系统会受到严重影响,这是由于JDK自带的序列化效率很低,不论是时间上还是空间上。

眼前一座山,踏平它 1万+

go项目实战——动手写分布式缓存GeeCache

GeeCache 的缓存全部存储在内存中,内存是有限的,因此不可能无限制地添加数据。假定我们设置缓存能够使用的内存大小为 N,那么在某一个时间点,添加了某一条缓存记录之后,占用内存超过了 N,这个时候就需要从缓存中移除一条或多条数据了。那移除谁呢?我们肯定希望尽可能移除“没用”的数据,那如何判定数据“有用”还是“没用”呢?

mirana的专栏 2188

day7 使用 Protobuf 通信

本文是`7天用Go从零实现分布式缓存GeeCache`的第七篇。 - 为什么要使用 `protobuf`? - 使用 `protobuf` 进行节点间通信,编码报文,提高效率。代码约`50`行

YouMing_Li的博客 770

c++分布式网络通信框架【万字拆解】

基于c++的分布式网络框架,项目基于muduo高性能网络库+Protobuf开发,实现的主要功能了是通过zookeeper实现服务注册以及发现,muduo网络库以及Protobuf实现远程RPC调用,异步日志。

weixin_44545838的博客 5707
上一篇: C++ AVL树手撕代码实现
下一篇: Leetcode44: 通配符匹配
zsiming
博客等级 码龄7年 43粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值