gRPC for C++: 完整指南与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 gRPC 以及为什么需要它?

\n\n

gRPC (gRPC Remote Procedure Calls) 是一个由 Google 开发的高性能、开源的远程过程调用 (RPC) 框架。它允许客户端应用程序直接调用服务器应用程序上的方法,就像调用本地对象一样,从而简化了分布式系统和微服务的创建。

\n\n

gRPC 的基础是 Protocol Buffers (protobuf),一种强大的结构化数据序列化机制。您在 .proto 文件中定义数据结构和服务,然后 protoc 编译器会生成所需语言(在本例中为 C++)的代码。

\n\n

gRPC 的主要优势:

\n
    \n
  • 高性能: 使用 HTTP/2 进行请求多路复用,并使用 Protobuf 二进制格式,比 JSON/XML 快得多。
  • \n
  • 强类型: 服务之间的契约在 .proto 文件中明确定义。
  • \n
  • 支持流式传输: 支持服务器端流、客户端流和双向流。
  • \n
  • 多语言支持: 可为 C++、Java、Python、Go、C#、Ruby 等多种语言生成客户端和服务器。
  • \n
  • 内置身份验证和加密: 支持 TLS/SSL 和拦截器 (interceptors)。
  • \n
\n\n

gRPC for C++ 库是一个原生实现,可提供对内存和性能的最大控制,这对于高负载系统、游戏服务器、金融应用程序和物联网至关重要。

\n\n

安装 gRPC for C++

\n\n

安装 gRPC for C++ 的过程比 Python 更复杂,因为它需要从源代码编译或使用 vcpkg 包管理器。我们将介绍两种主要方法。

\n\n

方法 1:通过 vcpkg 安装(推荐)

\n

vcpkg 是 Microsoft 提供的 C++ 跨平台包管理器。

\n
# 1. 克隆 vcpkg\ngit clone https://github.com/Microsoft/vcpkg.git\ncd vcpkg\n\n# 2. 安装 vcpkg (Windows: bootstrap-vcpkg.bat)\n./bootstrap-vcpkg.sh\n\n# 3. 集成到系统 (适用于 Visual Studio 或 CMake)\n./vcpkg integrate install\n\n# 4. 安装 gRPC (连同 protobuf 和依赖项)\n./vcpkg install grpc
\n

安装后,您需要在 CMakeLists.txt 中链接找到的包:

\n
find_package(gRPC CONFIG REQUIRED)\nfind_package(Protobuf CONFIG REQUIRED)\n\ntarget_link_libraries(my_target\n    gRPC::grpc++\n    gRPC::grpc++_reflection\n    protobuf::libprotobuf\n)
\n\n

方法 2:从源代码编译 (Linux/macOS)

\n

这种方法提供了更多控制,但需要安装依赖项 (cmake, openssl, zlib, abseil)。

\n
# 克隆包含子模块的仓库\ngit clone --recurse-submodules -b v1.62.0 https://github.com/grpc/grpc\ncd grpc\n\n# 创建构建目录\nmkdir -p cmake/build\ncd cmake/build\n\n# 配置并构建\ncmake ../.. -DgRPC_INSTALL=ON \\\n            -DCMAKE_BUILD_TYPE=Release \\\n            -DCMAKE_INSTALL_PREFIX=/usr/local\nmake -j$(nproc)\nsudo make install
\n\n

快速入门:"Hello World" 示例

\n\n

让我们创建一个简单的应用程序,它接收用户名并返回问候语。

\n\n

步骤 1:在 .proto 文件中定义服务

\n

创建文件 hello.proto:

\n
syntax = "proto3";\n\npackage helloworld;\n\n// 定义请求消息\nmessage HelloRequest {\n  string name = 1;\n}\n\n// 定义响应消息\nmessage HelloReply {\n  string message = 1;\n}\n\n// 定义 RPC 服务\nservice Greeter {\n  // 一元 RPC:一个请求 -> 一个响应\n  rpc SayHello (HelloRequest) returns (HelloReply);\n}
\n\n

步骤 2:生成 C++ 代码

\n
protoc --grpc_out=. --plugin=protoc-gen-grpc=`wh                    

推荐