洛阳建网站公司,scrm服务商,怎么把php网页源码下载,外网门户网站建设方案手写RPC——数据序列化工具protobuf
Protocol Buffers#xff08;protobuf#xff09;是一种用于结构化数据序列化的开源库和协议。下面是 protobuf 的一些优点和缺点#xff1a;
优点#xff1a; 高效的序列化和反序列化#xff1a;protobuf 使用二进制编码#xff0c…手写RPC——数据序列化工具protobuf
Protocol Buffersprotobuf是一种用于结构化数据序列化的开源库和协议。下面是 protobuf 的一些优点和缺点
优点 高效的序列化和反序列化protobuf 使用二进制编码相比于文本格式如 JSON 或 XML具有更高的序列化和反序列化性能。它使用紧凑的二进制格式节省了存储空间和网络带宽。 小巧的消息体积protobuf的编码格式非常紧凑消息体积较小。这对于需要在网络上传输大量数据或存储大量数据的场景非常有利减少了存储和传输的成本。 跨语言支持protobuf 支持多种编程语言包括 C, Java, Python, Go 等使得不同语言的应用程序能够相互通信和交换数据。protobuf 提供了自动生成的代码使得在不同语言之间进行数据传输更加方便。 可扩展性protobuf 的消息格式是可扩展的允许向已有的消息类型添加新的字段或修改现有字段而不会破坏向后兼容性。这使得在数据模型发生变化时能够平滑地升级和演化。 易于维护和更新由于 protobuf 使用 IDL接口定义语言来定义消息格式使得代码的维护和更新更加容易。只需更新 IDL 文件并重新生成代码就能够同步更新所有相关的代码。 缺点 不适合人类可读protobuf 使用二进制编码不像 JSON 或 XML 那样易于人类可读和调试。这对于调试和开发过程中的可视化和人类可读性要求较高的场景可能不够友好。 需要预先定义消息格式protobuf 要求在使用之前需要先定义消息格式并生成对应的代码。这增加了一些额外的步骤和工作量相比于一些动态的数据格式如 JSON可能稍显繁琐。 不支持动态架构protobuf 的消息格式在定义后是静态的不支持在运行时动态地修改和扩展消息。如果需要在运行时根据需要动态地修改数据结构protobuf可能不是最佳选择。 总体而言protobuf 是一种高效、跨语言和可扩展的数据序列化和通信协议适用于对数据大小和性能要求较高的场景。它在分布式系统、网络通信和存储等领域得到广泛应用。然而根据具体的使用场景和需求仍需综合考虑其优点和缺点选择合适的数据格式和通信协议。
安装protobuf
这里以ubuntu为例子
sudo apt install libprotobuf-dev使用
定义一个rpc.proto文件
syntax proto3;
package rpc;
message AddRequest {int32 x 1;int32 y 2;
}message AddResponse {int32 result 1;
}采用下面的指令转换为C代码 protoc --cpp_out. rpc.proto 一个简单的使用例子
#include iostream
#include string
#include rpc.pb.husing namespace std;
using rpc::AddRequest;
using rpc::AddResponse;int main() {// 构建请求消息AddRequest request;request.set_x(5);request.set_y(3);// 将消息进行序列化成字符串存储至requestStrstring requestStr;request.SerializeToString(requestStr);//对字符串进行解析AddRequest req;req.ParseFromString(requestStr);AddResponse response;response.set_result(request.x() request.y());coutresult:response.result()endl;return 0;
}输出结果如下 可见我的github仓库https://github.com/mulinhu/CPPer/tree/main/network_demo/proto_demo