C++下的gRPC与protobuf使用和介绍

本文介绍了gRPC框架,它是Google推出的开源、跨语言、跨平台、高性能的RPC框架,基于protobuf实现。文中阐述了gRPC的原理、服务类型、生命周期等,还说明了使用场景、支持语言等信息。此外,详细讲解了在C++中安装gRPC、编写HelloWorld程序及编译运行的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

gRPC 简介

概述

使用协议缓冲区

协议缓冲区版本

概述

服务定义

使用接口

同步与异步

RPC 生命周期

一元 RPC

服务器流式处理 RPC

客户端流式处理 RPC

双向流式处理 RPC

截止时间/超时

RPC 终止

取消 RPC

警告

元数据

渠道

GRPC的为什么?

为什么我要使用 gRPC?

谁在使用这个,为什么?

支持哪些编程语言?

如何开始使用 gRPC?

gRPC 在哪个许可证下?

我该如何贡献?

文档在哪里?

路线图是什么?

gRPC 版本的支持期限是多久?

什么是 gRPC 版本控制策略?

最新的 gRPC 版本是什么?

gRPC 发布何时发生?

如何报告 gRPC 中的安全漏洞?

我可以在浏览器中使用它吗?

我可以将 gRPC 与我最喜欢的数据格式(JSON、Protobuf、Thrift、XML)一起使用吗?

是否可以在服务网格中使用 gRPC?

gRPC 如何帮助移动应用程序开发?

为什么 gRPC 比任何二进制 blob 都优于 HTTP/2?

为什么 gRPC 比 REST 更好/更差?

gRPC 动机和设计原则

赋予动机

原则和要求

服务不是对象,消息不是引用

覆盖范围和简单性

免费和开放

互操作性和覆盖范围

通用和高性能

分层的

与有效载荷无关

阻塞和非阻塞

取消和超时

跛行

流控制

可插拔

扩展作为 API

元数据交换

标准化状态码

简介

安装

HelloWorld

编译运行


gRPC 简介

gRPC 和协议缓冲区简介。

本页介绍 gRPC 和协议缓冲区。gRPC 可以使用 协议缓冲区作为其接口定义语言 (IDL) 和基础消息 交换格式。如果你不熟悉 gRPC 和/或协议缓冲区,请阅读此内容! 如果只想深入了解并首先查看 gRPC 的运行情况,请选择一种语言并尝试其快速入门

概述

在 gRPC 中,客户端应用程序可以直接调用服务器应用程序上的方法 在不同的计算机上,就好像它是本地对象一样,使您可以更轻松地 创建分布式应用程序和服务。与许多 RPC 系统一样,gRPC 是 基于定义服务的思想,指定可以 使用其参数和返回类型远程调用。在服务器端, 服务器实现此接口并运行 gRPC 服务器来处理客户端调用。 在客户端,客户端有一个存根(在某些中称为客户端 语言),提供与服务器相同的方法。

                

gRPC 客户端和服务器可以在各种 环境 - 从 Google 内部的服务器到您自己的桌面 - 并且可以 以任何 gRPC 支持的语言编写。因此,例如,您可以轻松地 在 Java 中创建 gRPC 服务器,并使用 Go、Python 或 Ruby 中的客户端。另外 最新的 Google API 将具有其接口的 gRPC 版本,让您 轻松将 Google 功能构建到您的应用程序中。

使用协议缓冲区

默认情况下,gRPC 使用协议缓冲区,谷歌的 用于序列化结构化数据的成熟开源机制(尽管它 可以与其他数据格式(如 JSON)一起使用)。以下是如何快速介绍 它有效。如果您已经熟悉协议缓冲区,请随时跳过 继续下一节。

使用协议缓冲区的第一步是定义结构 对于要在原型文件中序列化的数据:这是普通文本 带有扩展名的文件。协议缓冲区数据结构化为消息,其中每条消息都是一个小的信息逻辑记录 包含一系列称为字段的名称-值对。这是一个简单的 例:.proto

message Person {
  string name = 1;
  int32 id = 2;
  bool has_ponycopter = 3;
}

然后,一旦指定了数据结构,就可以使用协议缓冲区 编译器以首选语言生成数据访问类 () 从您的原型定义。这些为每个字段提供了简单的访问器, 喜欢和,以及序列化/解析的方法 原始字节的整个结构。因此,例如,如果您选择 语言是C++,在上面的例子上运行编译器将生成一个 类称为 。然后,可以在应用程序中使用此类来 填充、序列化和检索协议缓冲区消息。protocname()set_name()PersonPerson

定义 gRPC 服务 在普通原型文件中,RPC 方法参数和返回类型指定为 协议缓冲区消息:

// The greeter service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

gRPC 与特殊的 gRPC 插件一起使用 从您的原型文件生成代码:您得到 生成的 gRPC 客户端和服务器代码,以及常规协议缓冲区 用于填充、序列化和检索消息类型的代码。若要了解有关协议缓冲区的详细信息,包括如何使用 所选语言的 gRPC 插件,请参阅protocprotoc协议缓冲区文档.

协议缓冲区版本

协议缓冲区已经可供开源用户使用一段时间, 本网站的大多数示例都使用协议缓冲区版本 3 (Proto3),它具有 稍微简化的语法,一些有用的新功能,并支持更多 语言。Proto3目前可用于Java,C++,Dart,Python, Objective-C,C#,一个精简运行时(Android Java),Ruby和JavaScript来自协议缓冲区 GitHub 存储库,以及来自戈朗/普罗托布夫官方套餐,还有更多语言正在开发中。您可以 在原型3语言指南参考 文档适用于每种语言。参考文档还 包括一个正式规范作为文件格式。.proto

通常,虽然您可以使用 proto2(当前默认协议缓冲区 版本),我们建议您将 proto3 与 gRPC 一起使用,因为它允许您使用 全系列的 gRPC 支持的语言,以及避免兼容性 Proto2 客户端与 Proto3 服务器通信的问题,反之亦然。

概述

服务定义

与许多 RPC 系统一样,gRPC 基于定义服务的思想, 指定可以使用其参数远程调用的方法,以及 返回类型。默认情况下,gRPC 使用协议 缓冲区作为接口 定义语言 (IDL),用于描述服务接口和 有效负载消息的结构。在以下情况下,可以使用其他替代方案 期望。

service HelloService {
  rpc SayHello (HelloRequest) returns (HelloResponse);
}

message HelloRequest {
  string greeting = 1;
}

message HelloResponse {
  string reply = 1;
}

gRPC 允许您定义四种服务方法:

  • 一元 RPC,其中客户端向服务器发送单个请求并获得 单响应返回,就像正常的函数调用一样。
rpc SayHello(HelloRequest) returns (HelloResponse);

  • 服务器流式处理 RPC,其中客户端向服务器发送请求并获取 用于读回消息序列的流。客户端从 返回流,直到没有更多消息。gRPC 保证消息 在单个 RPC 调用中排序。
rpc LotsOfReplies(HelloRequest) returns (stream HelloResponse);

  • 客户端流式处理 RPC,其中客户端写入一系列消息并发送 它们到服务器,再次使用提供的流。一旦客户有 写完消息,它等待服务器读取它们并返回 它的回应。同样,gRPC 保证单个 RPC 中的消息排序 叫。
rpc LotsOfGreetings(stream HelloRequest) returns (HelloResponse);

  • 双向流式处理 RPC,其中双方发送一系列消息 使用读写流。这两个流独立运行,因此客户端 服务器可以按照他们喜欢的任何顺序读取和写入:例如, 服务器可以等待接收所有客户端消息,然后再写入其 响应,或者它可以交替阅读消息然后编写消息,或者 读取和写入的其他一些组合。每个消息的顺序 流被保留。
rpc BidiHello(stream HelloRequest) returns (stream HelloResponse);

您将在下面的 RPC 生命周期部分中了解有关不同类型的 RPC 的更多信息。

使用接口

从文件中的服务定义开始,gRPC 提供协议 生成客户端和服务器端代码的缓冲区编译器插件。gRPC 用户 通常在客户端调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏马潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值