当前位置: 首页> 健康> 美食 > grpc cpp简单例子

grpc cpp简单例子

时间:2025/8/23 21:38:30来源:https://blog.csdn.net/heeheeai/article/details/140901464 浏览次数:0次

要在C++中使用Protocol Buffers (proto) 实现一个服务,通常会使用gRPC。这是一个高级的实现,涉及定义.proto文件、生成C++代码并实现服务器和客户端逻辑。

以下是一个完整的示例,包括.proto文件、C++服务器和客户端实现。

步骤 1: 安装依赖

需要安装Protocol Buffers编译器和gRPC。可以参考gRPC C++ Quick Start来安装这些依赖。

步骤 2: 定义.proto文件

创建一个名为example.proto的文件,定义服务和消息。

syntax = "proto3";package example;// The greeting service definition.
service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}
}// The request message containing the user's name.
message HelloRequest {string name = 1;
}// The response message containing the greetings.
message HelloReply {string message = 1;
}

步骤 3: 生成C++代码

使用protoc编译.proto文件生成C++代码。

protoc -I=. --grpc_out=. --plugin=protoc-gen-grpc=$(which grpc_cpp_plugin) example.proto
protoc -I=. --cpp_out=. example.proto

这会生成example.grpc.pb.h、example.grpc.pb.cc、example.pb.h和example.pb.cc文件。

步骤 4: 实现服务器

创建一个名为server.cpp的文件,包含以下代码:

#include <iostream>
#include <memory>
#include <string>#include <grpcpp/grpcpp.h>
#include "example.grpc.pb.h"using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
using example::Greeter;
using example::HelloRequest;
using example::HelloReply;// Logic and data behind the server's behavior.
class GreeterServiceImpl final : public Greeter::Service {Status SayHello(ServerContext* context, const HelloRequest* request,HelloReply* reply) override {std::string prefix("Hello ");reply->set_message(prefix + request->name());return Status::OK;}
};void RunServer() {std::string server_address("0.0.0.0:50051");GreeterServiceImpl service;ServerBuilder builder;builder.AddListeningPort(server_address, grpc::InsecureServerCredentials());builder.RegisterService(&service);std::unique_ptr<Server> server(builder.BuildAndStart());std::cout << "Server listening on " << server_address << std::endl;server->Wait();
}int main(int argc, char** argv) {RunServer();return 0;
}

步骤 5: 实现客户端

创建一个名为client.cpp的文件,包含以下代码:

#include <iostream>
#include <memory>
#include <string>#include <grpcpp/grpcpp.h>
#include "example.grpc.pb.h"using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
using example::Greeter;
using example::HelloRequest;
using example::HelloReply;class GreeterClient {
public:GreeterClient(std::shared_ptr<Channel> channel): stub_(Greeter::NewStub(channel)) {}std::string SayHello(const std::string& user) {HelloRequest request;request.set_name(user);HelloReply reply;ClientContext context;Status status = stub_->SayHello(&context, request, &reply);if (status.ok()) {return reply.message();} else {std::cout << status.error_code() << ": " << status.error_message()<< std::endl;return "RPC failed";}}private:std::unique_ptrGreeter::Stub stub_;
};int main(int argc, char** argv) {GreeterClient greeter(grpc::CreateChannel("localhost:50051", grpc::InsecureChannelCredentials()));std::string user("world");std::string reply = greeter.SayHello(user);std::cout << "Greeter received: " << reply << std::endl;return 0;
}

步骤 6: 编译和运行

首先编译服务器和客户端:

g++ -std=c++11 -o server server.cpp example.pb.cc example.grpc.pb.cc -lgrpc++ -lprotobuf -lpthread
g++ -std=c++11 -o client client.cpp example.pb.cc example.grpc.pb.cc -lgrpc++ -lprotobuf -lpthread

然后,在两个不同的终端中,分别启动服务器和客户端:

./server
./client

应该会看到客户端输出类似Greeter received: Hello world的消息。

这样,就完成了一个简单的基于gRPC和Protocol Buffers的C++服务的实现。

关键字:grpc cpp简单例子

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: