从零构建 gRPC 跨语言通信:C++ 服务端与 C# 客户端实战
在现代分布式系统中,gRPC 凭借高性能和跨语言特性成为微服务架构的首选。它基于 HTTP/2 协议,使用 Protocol Buffers 定义接口,能高效实现不同语言间的远程调用。本文将带你从零搭建一个完整的 gRPC 系统:用 C++ 写服务端,C# 写客户端。
环境准备
安装必要工具
1. Protocol Buffers 编译器 (protoc)
gRPC 依赖 Protobuf 定义数据结构。下载并安装 protoc 后,记得将其加入系统环境变量,确保命令行可直接调用。
下载地址:https://github.com/protocolbuffers/protobuf/releases
2. gRPC 相关工具(C++)
在 Ubuntu 上,直接通过包管理器安装开发库:
sudo apt install libgrpc++-dev libprotobuf-dev protobuf-compiler grpc-plugins
3. .NET 环境
C# 端需要 .NET SDK(版本 ≥ 6.0)。从官网下载安装后,在项目里添加必要的 NuGet 包:
dotnet add package Grpc.Net.Client
dotnet add package Google.Protobuf
dotnet add package Grpc.Tools
定义服务接口
创建一个 .proto 文件来定义契约。新建 sample_service.proto:
syntax = "proto3";
option csharp_namespace = "SampleService.Client";
package sampleservice;
message CalculationRequest {
double a = 1;
double b = 2;
}
message CalculationResult {
double result = 1;
}
service Calculator {
rpc Add (CalculationRequest) returns (CalculationResult);
rpc Subtract (CalculationRequest) returns (CalculationResult);
}
这里定义了 Calculator 服务,包含加法和减法两个 RPC 方法,以及对应的请求响应消息结构。
C++ 服务端实现
生成代码
根据 proto 文件生成 C++ 桩代码。编写 generate.sh 脚本:
#!/bin/bash
protoc -I=. --grpc_out=. --plugin=protoc-gen-grpc=`which grpc_cpp_plugin` sample_service.proto
protoc -I=. --cpp_out=. sample_service.proto
运行后会生成四个关键文件,包括服务接口定义 (*.grpc.pb.h) 和消息类型定义 (*.pb.h)。
实现服务逻辑
创建 calculator_service.h 声明服务类:
#include <grpcpp/grpcpp.h>
#
grpc::ServerContext;
grpc::Status;
sampleservice::CalculationRequest;
sampleservice::CalculationResult;
sampleservice::Calculator;
: Calculator::Service {
:
;
;
};


