// C++ gRPC 示例代码
// 首先需要安装 gRPC 和 Protocol Buffers,并生成相应的 .proto 文件的 C++ 代码。
// 假设我们有一个简单的 .proto 文件定义了一个服务和消息类型:
// example.proto
syntax = "proto3";
package example;
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply);
}
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
// 生成的 C++ 代码将包含客户端和服务器的存根(stubs),我们可以基于这些存根编写实际的客户端和服务器代码。
// 服务器端代码示例:
#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;
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;
}
// 客户端代码示例:
#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;
// 调用 RPC 方法
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_ptr<Greeter::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;
}
Greeter
服务有一个 SayHello
方法,接收一个 HelloRequest
消息并返回一个 HelloReply
消息。GreeterServiceImpl
类实现了 Greeter
服务接口中的 SayHello
方法。RunServer
函数设置了服务器监听地址,并启动了 gRPC 服务器。GreeterClient
类封装了与服务器通信的逻辑。SayHello
方法发送 HelloRequest
并接收 HelloReply
。通过这些代码,你可以实现一个简单的 gRPC 客户端-服务器应用程序。
上一篇:c++爬虫
下一篇:c++ bind
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站