以下是一个简单的C++实现RPC(远程过程调用)的示例代码:
server.cpp
#include <iostream>
#include <string>
#include <grpcpp/grpcpp.h>
#include "rpc_example.grpc.pb.h"
using grpc::Server;
using grpc::ServerBuilder;
using grpc::ServerContext;
using grpc::Status;
class RPCServiceImpl final : public RPCExample::Service {
Status SayHello(ServerContext* context, const HelloRequest* request,
HelloReply* reply) override {
std::string name = request->name();
std::cout << "Received request from client: " << name << std::endl;
std::string message = "Hello, " + name + "! This is the server.";
reply->set_message(message);
return Status::OK;
}
};
void RunServer() {
std::string server_address("0.0.0.0:50051");
RPCServiceImpl 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() {
RunServer();
return 0;
}
client.cpp
#include <iostream>
#include <memory>
#include <string>
#include <grpcpp/grpcpp.h>
#include "rpc_example.grpc.pb.h"
using grpc::Channel;
using grpc::ClientContext;
using grpc::Status;
class RPCClient {
public:
explicit RPCClient(std::shared_ptr<Channel> channel)
: stub_(RPCExample::NewStub(channel)) {}
void SayHello(const std::string& name) {
HelloRequest request;
request.set_name(name);
HelloReply reply;
ClientContext context;
Status status = stub_->SayHello(&context, request, &reply);
if (status.ok()) {
std::cout << "Received reply from server: " << reply.message()
<< std::endl;
} else {
std::cout << "RPC failed. Error code: " << status.error_code()
<< ", error message: " << status.error_message() << std::endl;
}
}
private:
std::unique_ptr<RPCExample::Stub> stub_;
};
int main() {
std::string server_address("localhost:50051");
RPCClient client(
grpc::CreateChannel(server_address, grpc::InsecureChannelCredentials()));
client.SayHello("Alice");
return 0;
}
这是一个基于 gRPC 框架的简单示例,其中定义了一个 RPC service RPCExample
,包含一个方法 SayHello
,客户端通过调用该方法向服务器发送请求,并接收服务器的响应。你可以根据需要修改和扩展代码来实现更复杂的功能。请确保已经安装了 gRPC 和 Protobuf 相关的依赖库,并根据你自己的需求进行适当调整。
内容由零声教学AI助手提供,问题来源于学员提问