前言
在现代分布式系统中,gRPC 作为高性能、跨语言的 RPC 框架越来越受欢迎。它基于 HTTP/2 协议,使用 Protocol Buffers(Protobuf)作为接口定义语言,支持多种编程语言,能够高效地实现不同语言之间的远程过程调用。本文将手把手教你如何从零开始构建一个完整的 gRPC 通信系统,使用 C++ 实现服务端,C# 实现客户端。
一、环境准备
必要工具安装
1. Protocol Buffers 编译器 (protoc)
Protocol Buffers 是一种轻便高效的结构化数据存储格式,gRPC 使用它来定义服务接口和数据结构。你需要下载并安装 Protocol Buffers 编译器 protoc,下载地址为:https://github.com/protocolbuffers/protobuf/releases。安装完成后,确保将 protoc 添加到系统的 PATH 环境变量中,这样在命令行中就可以直接使用它。
2. gRPC 相关工具(C++)
对于 C++ 开发,你需要安装 gRPC 和 protobuf 库。在 Ubuntu 系统上,可以使用以下命令进行安装:
sudo apt install libgrpc++-dev libprotobuf-dev protobuf-compiler grpc-plugins
3. .NET 环境
C# 开发需要安装 .NET SDK(版本 ≥ 6.0),你可以从 https://dotnet.microsoft.com/download 下载并安装。安装完成后,在 C# 项目中添加必要的 NuGet 包:
dotnet add package Grpc.Net.Client
dotnet add package Google.Protobuf
dotnet add package Grpc.Tools
二、定义服务接口
创建 proto 文件
首先,我们需要创建一个 .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);
}
在这个 .proto 文件中,我们定义了一个名为 Calculator 的服务,包含两个方法:Add 和 Subtract,分别用于执行加法和减法运算。同时,我们还定义了请求消息 CalculationRequest 和响应消息 CalculationResult。
三、C++ 服务端实现
1. 生成 gRPC 代码
为了根据 .proto 文件生成 C++ 代码,我们需要创建一个脚本 generate.sh:


