/* 服务通信: 以请求响应的方式实现不同节点之间数据交互的通信模式 用于偶然的、对实时性有要求、有一定逻辑处理需求的数据传输场景 需求: 客户端发送请求提交两个整型数字,服务端处理请求提取两个数字求和,并将结果响应回客户端 步骤: 消息载体protobuf 服务端 客户端 编译并执行 */ ////////////////////////proto///////////////////////////////////// // demo_base_proto目录下新建addints.proto syntax = "proto2"; package apollo.cyber.demo_base_proto; message AddInts_Request{ requried int64 num1 = 1; requried int64 num2 = 2; } message AddInts_response{ requried int64 sum = 1; } ////////////////////////////////////////////////////////////////// //////////////////////////BUILD/////////////////////////////////// proto_library( name = "addints_proto", srcs = ["addints.proto"] ) cc_library( name = "addints_cc", deps = [":addints_proto"] ) ////////////////////////////////////////////////////////////////// // 编译:bezal build cyber/demo_base_proto/... ///////////////////////////////服务端cpp////////////////////////// // demo_cc目录下新建c++文件demo03_server.cc /* 1.包含头文件 2.初始化 3.创建节点 4.创建服务方 5.数据处理 6.等待关闭 */ #include "cyber/cyber.h" #include "cyber/demo_base_proto/addints.pb.h" using apollo::cyber::demo_base_proto::AddInts_Request; using apollo::cyber::demo_base_proto::AddInts_response; void cb(const shared_ptr<AddInts_Request>& request, const shared_ptr<AddInts_Response>& response){ int64_t num1 = request->num1(); int64_t num2 = request->num2(); AINFO << "客户端请求num1 = " << num1 << ", num2 = " << num2; // 求和并设置响应 int64_t sum = num1 + num2; response->set_sum(sum); } int main(int argc, char* argv[]) { apollo::cyber::Init(argv[0]); AINFO << "服务端执行..."; // 创建节点 auto server_node = apollo::cyber::CreateNode("server_node"); // 创建服务方 auto server = node->CreateService<AddInts_Request, AddInts_Response>("addints", cb); // 数据处理 // 等待关闭 apollo::cyber::WaitForShutdown(); return 0; } ///////////////////////////////////////////////////////////////////////////// ////////////////////////////服务方BUILD////////////////////////////////////// cc_binary( name = "demo03_server_cc", srcs = ["demo03_server.cc"], deps = [ "//cyber", "//cyber/demo_base_proto:addints_cc"] ) ///////////////////////////////////////////////////////////////////////////// // 编译:bezal build cyber/demo_cc/... // source cyber/setup.bash // 刷新环境变量 /////////////////////////////客户端cpp///////////////////////////////////// // demo_cc目录下新建c++文件demo04_client.cc /* 1.包含头文件 2.初始化cyber 3.创建节点 4.创建客户端 5.发送数据 6.等待关闭 */ #include "cyber/cyber.h" #include "cyber/demo_base_proto/addints.pb.h" using apollo::cyber::demo_base_proto::AddInts_Request; using apollo::cyber::demo_base_proto::AddInts_response; int main(int arc, char* argv[]) { apollo::cyber::Init(argv[0]); if(argc != 3) { AINFO << "执行程序时请输入两个数字作为参数"; return 1; } AINFO << "客户端..."; // 创建节点 auto client_node = apollo::cyber::CreateNode("client_node"); // 创建客户端 auto client = client_node->CreateClient<AddInts_Request, AddInts_Reponse>("addints"); // 发送数据 AINFO << "等待服务启动..."; auto request = std::make_shared<AddInts_Request>(); request->set_num1(atoll(argv[1])); request->set_num2(atoll(argv[2])); AINFO << "发送num1 = " << request->num1() << ", num2 = " << request->num2(); auto response = client->SendRequest(request); // 处理响应 AINFO << "响应结果为:" << request->sum(); // 等待关闭 apollo::cyber::WaitForShutdown(); return 0; } //////////////////////////////////////////////////////////////////// /////////////////////////客户端BUILD//////////////////////////////// cc_binary( name = "demo04_client_cc", srcs = ["demo04_client.cc"], deps = [ "//cyber", "//cyber/demo_base_proto:addints_cc"] ) /////////////////////////////////////////////////////////////////// // 编译:bezal build cyber/demo_cc/... // source cyber/setup.bash // 刷新环境变量 /* 执行 ./bezal-bin/cyber/demo_cc/demo03_server_cc ./bezal-bin/cyber/demo_cc/demo04_client_cc */
标签:服务,proto,cc,demo,通信,cyber,addints,base From: https://www.cnblogs.com/WTSRUVF/p/17539541.html