当前位置: 首页 > news >正文

给女朋友做情侣网站的程序员周口seo 网站

给女朋友做情侣网站的程序员,周口seo 网站,智慧团建手机登录入口电脑版,手机导航下载2022新版目录 一、Protobuf与RPC框架的通信流程概述二、Protobuf与RPC在C中的实际应用2.1 定义 .proto 文件2.2 编译 .proto 文件生成C代码2.3 实现服务器端逻辑2.4 实现客户端逻辑2.5 使用CMake构建工程2.6 编译与运行2.7 关键组件解析2.8 序列化与反序列化的实现 三、关键实现与解析四… 目录 一、Protobuf与RPC框架的通信流程概述二、Protobuf与RPC在C中的实际应用2.1 定义 .proto 文件2.2 编译 .proto 文件生成C代码2.3 实现服务器端逻辑2.4 实现客户端逻辑2.5 使用CMake构建工程2.6 编译与运行2.7 关键组件解析2.8 序列化与反序列化的实现 三、关键实现与解析四、工程实践中的最佳实践五、总结附录常用Protobuf与gRPC命令参考资料 在现代分布式系统中高效的通信至关重要而ProtobufProtocol Buffers不仅能提供数据序列化的高效性还常被用于与RPC远程过程调用框架结合优化客户端与服务器之间的通信效率。本文将详细解析如何在C工程中使用Protobuf并结合RPC框架构建高性能的分布式系统通信机制。 一、Protobuf与RPC框架的通信流程概述 为了便于理解以下结合Protobuf和RPC的通信流程进行详细解析 定义IDL接口定义语言文件通过Protobuf的.proto文件定义服务接口和消息格式这是所有客户端与服务器通信的基础。 编译IDL文件使用Protobuf编译器protoc生成客户端与服务器的代码骨架。这一步使得开发者无需关心底层通信细节大幅减少编码工作量。 客户端调用服务客户端通过调用生成的骨架代码发起请求Protobuf负责将消息进行序列化并通过RPC框架的协议栈传输至服务器。 服务器处理请求服务器接收客户端请求反序列化数据执行相应的业务逻辑并将结果序列化为响应数据返回给客户端。 客户端接收响应客户端接收到服务器的响应后反序列化数据并继续处理后续业务逻辑。 二、Protobuf与RPC在C中的实际应用 2.1 定义 .proto 文件 首先我们需要通过Protobuf定义服务接口和消息结构。例如下面的.proto文件定义了一个简单的用户服务接口包括获取用户信息的服务 syntax proto3;package example;message User {int32 id 1;string name 2;string email 3; }message GetUserRequest {int32 id 1; }message GetUserResponse {User user 1; }service UserService {rpc GetUser (GetUserRequest) returns (GetUserResponse); }2.2 编译 .proto 文件生成C代码 使用protoc编译器生成C代码 protoc --cpp_out. --grpc_out. --pluginprotoc-gen-grpcwhich grpc_cpp_plugin user_service.proto编译后生成的文件包含以下两部分 消息类user_service.pb.h 和 user_service.pb.cc服务接口及骨架代码user_service.grpc.pb.h 和 user_service.grpc.pb.cc 2.3 实现服务器端逻辑 服务器端需要实现生成的服务接口并通过RPC服务器处理客户端的请求。下面是基于gRPC的C服务器实现 #include iostream #include memory #include string #include grpcpp/grpcpp.h #include user_service.grpc.pb.husing grpc::Server; using grpc::ServerBuilder; using grpc::ServerContext; using grpc::Status; using example::UserService; using example::GetUserRequest; using example::GetUserResponse; using example::User;class UserServiceImpl final : public UserService::Service { public:Status GetUser(ServerContext* context, const GetUserRequest* request,GetUserResponse* reply) override {// 模拟数据库操作User* user reply-mutable_user();user-set_id(request-id());user-set_name(Alice);user-set_email(aliceexample.com);return Status::OK;} };void RunServer() {std::string server_address(0.0.0.0:50051);UserServiceImpl service;ServerBuilder builder;builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());builder.RegisterService(service);std::unique_ptrServer server(builder.BuildAndStart());std::cout Server listening on server_address std::endl;server-Wait(); }int main() {RunServer();return 0; }2.4 实现客户端逻辑 客户端通过调用生成的代码与服务器进行通信。以下是gRPC客户端的实现代码 #include iostream #include memory #include grpcpp/grpcpp.h #include user_service.grpc.pb.husing grpc::Channel; using grpc::ClientContext; using grpc::Status; using example::UserService; using example::GetUserRequest; using example::GetUserResponse;class UserServiceClient { public:UserServiceClient(std::shared_ptrChannel channel): stub_(UserService::NewStub(channel)) {}GetUserResponse GetUser(int id) {GetUserRequest request;request.set_id(id);GetUserResponse response;ClientContext context;Status status stub_-GetUser(context, request, response);if (!status.ok()) {std::cerr RPC failed: status.error_message() std::endl;}return response;}private:std::unique_ptrUserService::Stub stub_; };int main() {UserServiceClient client(grpc::CreateChannel(localhost:50051, grpc::InsecureChannelCredentials()));int user_id 1;GetUserResponse response client.GetUser(user_id);std::cout User ID: response.user().id() std::endl;std::cout Name: response.user().name() std::endl;std::cout Email: response.user().email() std::endl;return 0; }2.5 使用CMake构建工程 使用CMake构建Protobuf和gRPC项目确保将生成的代码自动编译到项目中 cmake_minimum_required(VERSION 3.14) project(ProtobufRPCExample)find_package(Protobuf REQUIRED) find_package(gRPC REQUIRED)set(CMAKE_CXX_STANDARD 14)protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS user_service.proto) grpc_generate_cpp(GRPC_SRCS GRPC_HDRS user_service.proto)add_executable(server server.cpp ${PROTO_SRCS} ${PROTO_HDRS} ${GRPC_SRCS} ${GRPC_HDRS}) target_link_libraries(server PRIVATE protobuf::libprotobuf gRPC::grpc)add_executable(client client.cpp ${PROTO_SRCS} ${PROTO_HDRS} ${GRPC_SRCS} ${GRPC_HDRS}) target_link_libraries(client PRIVATE protobuf::libprotobuf gRPC::grpc)2.6 编译与运行 安装依赖 确保已安装Protobuf和gRPC库。可以参考以下步骤进行安装 # 安装gRPC及其依赖 git clone -b v1.53.0 https://github.com/grpc/grpc cd grpc git submodule update --init mkdir -p build cd build cmake .. -DCMAKE_BUILD_TYPERelease make -j4 sudo make install sudo ldconfig编译项目 在项目根目录下创建构建目录并编译 mkdir build cd build cmake .. make运行服务器 在一个终端中启动服务器 ./server输出 Server listening on 0.0.0.0:50051运行客户端 在另一个终端中运行客户端 ./client输出 User ID: 1 Name: Alice Email: aliceexample.com2.7 关键组件解析 以下是各组件在上述实现中的作用 client客户端 客户端代码位于 client.cpp通过 UserServiceClient 类发起RPC请求。serialize序列化Protobuf自动处理消息的序列化将 GetUserRequest 转换为字节流。deserialize反序列化接收 GetUserResponse 字节流并转换为 User 对象。 server服务器 服务器代码位于 server.cpp通过 UserServiceImpl 类实现服务逻辑。serialize/deserializeProtobuf自动处理接收的请求数据反序列化和响应数据序列化。 protocol stack协议栈 在本示例中gRPC基于HTTP/2协议栈处理网络通信细节负责数据的传输和连接管理。 idl接口定义语言 user_service.proto 文件定义了服务接口和消息结构作为IDL文件。 compiler编译器 protoc 编译器与gRPC插件一起将.proto文件编译生成C代码生成消息类和服务骨架代码。 skeleton骨架代码 生成的 user_service.grpc.pb.h 和 user_service.grpc.pb.cc 文件包含服务接口的骨架代码。服务器实现类 UserServiceImpl 继承自生成的骨架类完成业务逻辑。客户端通过生成的 UserService::Stub 类进行远程调用隐藏了底层的通信细节。 2.8 序列化与反序列化的实现 在上述示例中序列化与反序列化过程由gRPC和Protobuf库自动处理开发者无需手动编写相关代码。然而理解这一过程对于优化和调试至关重要。 序列化 客户端在调用 stub_-GetUser(context, request, response) 时Protobuf将 GetUserRequest 对象序列化为二进制格式通过gRPC协议栈发送到服务器。 反序列化 服务器接收到字节流后Protobuf将其反序列化为 GetUserRequest 对象并传递给 GetUser 方法进行处理。 响应过程 服务器将 GetUserResponse 对象序列化后通过gRPC协议栈发送回客户端客户端再将其反序列化为 GetUserResponse 对象。 三、关键实现与解析 通过上述代码示例我们可以看到Protobuf和RPC的高效结合体现在以下几个方面 自动化生成代码通过Protobuf定义的IDL文件.proto可以自动生成C类省去手动编写通信代码的复杂性。 数据序列化与反序列化Protobuf通过高效的二进制格式减少了数据传输的开销保证了性能和数据传输的一致性。 RPC框架的透明性开发者不必关心底层通信协议gRPC框架负责数据的传输和连接管理使得程序员能够像调用本地函数一样完成远程调用。 四、工程实践中的最佳实践 代码生成自动化集成Protobuf的代码生成步骤至构建系统确保.proto文件变更后自动生成与其匹配的代码。 性能调优对于大规模消息传输可考虑使用Protobuf的流式解析功能并优化网络带宽。 版本兼容性在设计Protobuf消息结构时尽量避免破坏兼容性确保后续扩展性。例如避免删除字段或改变字段编号。 错误处理机制在客户端和服务器端实现完备的错误处理机制确保网络异常和序列化失败时的回退策略。 五、总结 Protobuf与RPC框架的结合为现代分布式系统提供了一种高效的通信方案。在C工程中通过合理设计和使用Protobuf进行数据序列化再借助gRPC完成远程过程调用可以大幅提升通信效率并简化系统的开发与维护。 附录常用Protobuf与gRPC命令 编译Protobuf文件 protoc --cpp_out. user_service.proto编译gRPC Protobuf文件 protoc --grpc_out. --pluginprotoc-gen-grpcwhich grpc_cpp_plugin user_service.proto生成所有代码包括消息和gRPC服务 protoc --cpp_out. --grpc_out. --pluginprotoc-gen-grpcwhich grpc_cpp_plugin user_service.proto参考资料 Protocol Buffers 官方文档gRPC 官方文档Protobuf 编码原理详解0voice · GitHub
http://www.hkea.cn/news/14511990/

相关文章:

  • 高端网站建设代码wordpress模版哪个好
  • 广州11个区排名windows优化大师电脑版
  • 网站推广的基本方法有哪些电脑商业网站怎的做
  • 网站统计访客数量怎么做泉州做网站多少钱
  • jsp网站开发平台建设银行网站理财产品为何不让买
  • 东城企业网站开发企业网站建设专业
  • 网站的后台南昌网站建设公司案例
  • 自己怎样建设淘宝返现网站嘉兴网站如何制作
  • seo网站诊断建立网站主机
  • shopex网站经常出错蓝韵网络专业网站建设怎么样
  • 南阳网站建设口碑新型网络平台代理加盟
  • 企业网站建设公司哪家好盘多多百度网盘搜索引擎
  • 建设电器网站目的及功能定位广州做网站mxszpt
  • 百度怎么推广网站网络设计中网络设备选择的原则
  • 常德网站建设wynet123网站建设的物流
  • 网站建设 企业文化网络推广课程培训
  • 做网站没签合同logo设计 公司 免费
  • 常熟住房和城乡建设局网站网站建设开发计入什么会计科目
  • 网站开发的前台开发工具腾讯推广联盟
  • 静态网页做的网站怎么发到网上收录图片的网站
  • .net wap网站江西赣州人才网最新招聘信息
  • 手机app 网站西安建设网站
  • 如何做色流量网站中国哪家做网站的公司最大
  • 西安哪有做网站的事业单位网站建设方案
  • 网站logo如何替换网页编辑岗位职责
  • 工程类招聘网站哪个好ui网页设计实训报告
  • 免费资源源码网站东莞做网站公司哪家比较好
  • 网站建设好后有些什么资料四川平台网站建设设计
  • 镇江网站建设zjmfkj开发游戏用什么编程软件
  • 英文版网站制作门业网站 模板