C++ 语言 gRPC 框架应用示例

C++阿木 发布于 2025-06-14 6 次阅读


C++ gRPC 框架应用示例详解

gRPC 是一个高性能、跨语言的 RPC 框架,由 Google 开发。它使用 Protocol Buffers 作为接口定义语言,支持多种编程语言,包括 C++。本文将围绕 C++ 语言在 gRPC 框架中的应用,提供一个示例,并详细解释其实现过程。

准备工作

在开始之前,请确保您已经安装了以下工具:

1. C++ 编译器(如 g++)
2. Protocol Buffers 编译器(protoc)
3. gRPC 库(gRPC-C++)

您可以从以下链接下载这些工具:

- Protocol Buffers: https://github.com/protocolbuffers/protobuf
- gRPC: https://github.com/grpc/grpc

示例项目结构

以下是一个简单的 gRPC 应用项目结构:


my_grpc_project/
├── src/
│ ├── my_service/
│ │ ├── my_service.grpc.pb.cc
│ │ ├── my_service.grpc.pb.h
│ │ ├── my_service.pb.cc
│ │ └── my_service.pb.h
│ ├── main.cpp
│ └── server.cpp
├── include/
│ └── my_service/
│ └── my_service.h
├── build/
│ └── ...
└── CMakeLists.txt

步骤 1:定义服务

我们需要定义一个服务。在 `my_service` 目录下创建一个名为 `my_service.proto` 的文件,并定义我们的服务:

protobuf
syntax = "proto3";

package my_service;

// 定义一个简单的服务
service MyService {
// 定义一个方法
rpc Add (AddRequest) returns (AddResponse);
}

// 定义请求和响应消息
message AddRequest {
int32 a = 1;
int32 b = 2;
}

message AddResponse {
int32 result = 1;
}

使用 Protocol Buffers 编译器(protoc)生成 C++ 代码:

bash
protoc --cpp_out=. my_service.proto

这将生成 `my_service.pb.cc`、`my_service.pb.h`、`my_service.grpc.pb.cc` 和 `my_service.grpc.pb.h` 文件。

步骤 2:实现服务

在 `src/my_service` 目录下创建一个名为 `my_service.h` 的头文件,并实现我们的服务:

cpp
include "my_service.grpc.pb.h"

class MyServiceImpl final : public MyService::Stub::StubInterface {
public:
// 实现 Add 方法
grpc::Status Add(grpc::ServerContext context,
const AddRequest request,
AddResponse response) override {
response->set_result(request->a() + request->b());
return grpc::Status::OK;
}
};

步骤 3:创建服务器

在 `src` 目录下创建一个名为 `server.cpp` 的文件,并实现服务器:

cpp
include "my_service.h"
include "my_service.grpc.pb.h"
include

int main(int argc, char argv) {
grpc::ServerBuilder builder;

// 添加服务
builder.AddService(new MyServiceImpl());

// 绑定端口
builder.AddListeningPort("0.0.0.0:50051", grpc::InsecureServerCredentials());

// 构建并启动服务器
std::unique_ptr server = builder.BuildAndStart();
std::cout << "Server listening on port 50051" <Wait();
return 0;
}

步骤 4:创建客户端

在 `src` 目录下创建一个名为 `client.cpp` 的文件,并实现客户端:

cpp
include "my_service.h"
include "my_service.grpc.pb.h"
include

int main(int argc, char argv) {
grpc::ChannelArguments args;
args.SetChannelArgument("grpc.max_send_message_length", "104857600");
std::shared_ptr channel = grpc::CreateCustomChannel(
"localhost:50051", grpc::InsecureChannelCredentials(), args);

std::shared_ptr stub = MyService::NewStub(channel);

AddRequest request;
request.set_a(10);
request.set_b(20);

AddResponse response;
grpc::Status status = stub->Add(&request, &response);

if (status.ok()) {
std::cout << "Result: " << response.result() << std::endl;
} else {
std::cout << "RPC failed: " << status.error_message() << std::endl;
}

return 0;
}

步骤 5:构建和运行

使用 CMake 构建项目:

bash
mkdir build && cd build
cmake ..
make

运行服务器:

bash
./server

运行客户端:

bash
./client

您应该会看到以下输出:


Server listening on port 50051
Result: 30

总结

本文提供了一个简单的 C++ gRPC 应用示例,展示了如何定义服务、实现服务、创建服务器和客户端。通过这个示例,您可以了解 gRPC 在 C++ 中的基本使用方法。在实际项目中,您可能需要处理更复杂的服务和客户端逻辑,但基本原理是相同的。

希望这篇文章能帮助您更好地理解 C++ gRPC 框架的应用。