gRPC 状态码解读:一文看懂

news2024/11/15 19:38:03

gRPC 是什么?

gRPC(gRPC Remote Procedure Call)是一个高性能的开源框架,它通过远程过程调用(RPC)机制促进应用程序之间的通信。

gRPC 框架使客户端应用程序能够调用不同机器上的服务器应用程序的方法,就好像它是本地对象一样。因此,该框架通过抽象网络通信的复杂性,简化了分布式系统的开发。

gRPC 的关键特性

语言中立性

RPC 是平台无关的,并支持多种编程语言,促进了不同开发环境之间的互操作性。这意味着用一种语言编写的 gRPC 服务可以被另一种语言的客户端调用,只要这两种语言都有 gRPC 库。

协议缓冲区

它利用协议缓冲区(Protocol Buffers),这是一种用于定义数据结构和远程服务接口的语言中立机制。这确保了客户端和服务器之间高效的数据序列化和反序列化。协议缓冲区定义了服务之间交换的数据结构。

在通过网络发送之前,数据被序列化成紧凑的二进制格式,然后在接收端反序列化回原始格式。这种二进制格式比如 JSON 或 XML 的文本格式更高效,可以提升 gRPC 应用的性能。

高性能

gRPC 利用 HTTP/2 进行高效的数据传输,与传统的 RPC 框架相比,通信更快。HTTP/2 是对今天大多数网络流量基础上的 HTTP/1.1 协议的重大改进。HTTP/2 允许通过单一连接发送多个请求,这可以显著减少延迟。此外,HTTP/2 支持头部压缩,进一步提升性能。

丰富的功能

它提供了内置的功能,如认证、授权、负载均衡和健康检查,简化了开发过程。这些功能有助于确保 gRPC 应用的安全性、可靠性和可扩展性。

自动代码生成

gRPC 利用协议缓冲区定义自动生成客户端和服务器代码,这可以节省开发人员的时间和精力,同时有助于确保客户端和服务器代码的兼容性。

支持流式传输

gRPC 支持不同的流式传输模式,包拥有单次请求/单次响应(Unary)、客户端流式(多次请求/单次响应)、服务器端流式(单次请求/多次响应)和双向流式(多次请求/多次响应)。这种灵活性使 gRPC 适用于广泛的用例,包括实时数据流和文件传输。

gRPC 状态码是什么?

gRPC 框架依赖于 gRPC 状态码来传达 RPC(远程过程调用)的结果,为用户提供操作是成功还是失败的信息。

gRPC 状态码的类型

gRPC 定义了一组状态码来传达 RPC 的结果。这些代码比简单的成功/失败消息提供更具体的信息,使客户能够了解可能发生的任何错误的性质。以下是不同类型的分解:

成功(OK)

  • 代码:0
  • 描述:RPC 成功完成。这是理想的结果,表明服务器无问题地处理了请求。

错误代码(用户生成)

这些代码通常由服务器端的应用逻辑生成,并指示在 RPC 过程中遇到的特定问题。

CANCELLED(代码:1)
  • 描述:操作被取消,通常是应客户的请求。这可能是由于超时、用户交互或其他原因。
UNKNOWN(代码:2)
  • 描述:服务器上发生了意外错误,且没有更具体的问题细节。这是一个未预见问题的集合。
INVALID_ARGUMENT(代码:3)
  • 描述:客户在请求中提供了无效参数。这可能是因为缺少必需字段、数据类型错误或超出预期范围的值。
DEADLINE_EXCEEDED(代码:4)
  • 描述:请求完成耗时过长,超过了设定的截止时间。这可能是因为服务器处理慢、网络问题或传输的数据量过大。
NOT_FOUND(代码:5)
  • 描述:服务器上未找到请求的资源(例如文件、数据库条目)。
ALREADY_EXISTS(代码:6)
  • 描述:尝试创建已经存在的资源。这可能是在尝试插入重复数据或创建具有冲突名称的内容时发生的。
PERMISSION_DENIED(代码:7)
  • 描述:客户端缺乏执行请求操作的必要权限。这可能是由于访问控制不足或安全设置问题。
RESOURCE_EXHAUSTED(代码:8)
  • 描述:服务器耗尽了完成请求所需的资源(例如内存、磁盘空间)。
FAILED_PRECONDITION(代码:9)
  • 描述:由于服务器处于意外状态,请求无法处理。这可能是由于与参数本身无直接相关的请求中的无效数据,或服务器处于不一致状态。
ABORTED(代码:10)
  • 描述:服务器端中止了操作。这可能是由于服务器实现特定的各种原因。
OUT_OF_RANGE(代码:11)
  • 描述:请求包含在预期范围之外的值。这可能是一组有效数字之外的数字或不符合允许时间范围的日期。
UNIMPLEMENTED(代码:12)
  • 描述:服务器不支持请求的 RPC 方法。这可能是因为服务器缺少实现或过时的客户端尝试使用较新功能。
INTERNAL(代码:13)
  • 描述:发生内部服务器错误。这是在服务器遇到意外问题且无法更具体分类时使用的通用错误代码。

库生成的代码(gRPC 核心)

这些代码不是直接由用户代码生成的,而是在特定情况下由 gRPC 库自身生成的。

DATA_LOSS(代码:15)
  • 描述:在 RPC 中发生了数据丢失。这可能是由于网络问题或存储系统问题。

gRPC 调试和管理

下面使用 Apifox 做演示,用户可以访问到对所有gRPC调用方法的控制,包括:

  • Unary(一对一)
  • Server Streaming(服务器端流)
  • Client Streaming(客户端流)
  • Bidirectional Streaming(双向流)

1. 创建一个新的 gRPC 项目

首先,在控制台中点击“创建新项目”的按钮。在项目类型中选择gRPC,输入你的项目名称然后点击“创建”按钮开始一个新项目。

2. 上传.proto文件

通过导入用于定义 gRPC 服务,方法和消息的.proto文件来配置你的接口。这个文件可以通过拖放到上传区域或者通过提供一个在线的URL来进行上传。

3. 开始调试你的 gRPC 接口

一旦.proto文件被上传,Apifox会根据文件内容自动生成所需的接口信息。此时,你可以开始进行接口调试。通过模拟请求和查看响应来测试和优化你的应用。

结论

gRPC 状态代码在确保计算机应用程序之间高效且信息丰富的通信方面起着至关重要的作用。通过利用标准化的代码系统,开发人员可以简化错误处理并有效地传达交互过程中出现的问题的原因。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1706366.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零拷贝(Zero Copy)

目录 零拷贝(Zero Copy) 1.什么是Zero Copy? 2.物理内存和虚拟内存 3.内核空间和用户空间 4.Linux的I/O读写方式 4.1 I/O中断原理 4.2 DMA传输原理 5.传统I/O方式 5.1传统读操作 5.2传统写操作 6.零拷贝 6.1.用户态直接IO 6.2.mmapwrite …

计算机图形学入门02:线性代数基础

1.向量(Vetors) 向量表示一个方向,还能表示长度(向量的摸)。一般使用单位向量表示方向。 向量加减:平行四边形法则、三角形法则。比卡尔坐标系描述向量,坐标直接相加。 1.1向量点乘(…

帆软报表点击表格给数据集传递参数案例

一、效果 有四个模块,分别是采购总金额,采购总数量,采购合同数量,采购合同申请数量通过点击单元格上的月份,展示不同的月份数据,进行单元格和表格之间的联动 二、准备好数据库表和展示数据内容 2.1 建表 …

英语四级翻译练习笔记③——大学英语四级考试2023年12月真题(第三套)

目录 引言(必看) 四级翻译评分标准分析及真题解析 四级翻译评分标准 四级翻译真题 学生作答 1. 评分 2. 修正翻译中的错误 错误标记: 3. 改正句子 4. 标出错误单词 5. 标准答案 6. 常考万能句子 7.重点单词的中文意思 引言&…

Excel未响应时强关后,Excel插件消失

目录 我们分析一下插件消失的原因: 针对上面表现出来的2个问题,进行针对性的解决 : 1、不被关进去,是不是就没有后续的一系列的问题了,各自安好 2、保留住自动加载的行为 PS:配置受信任的位置注册列表…

【K8s】专题四(1):Kubernetes 控制器简介

以下内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发!欢迎扫码关注个人公众号! 目录 一、基本概念 二、工作原理 三、常见类型 四、相关特性 一、基本概念 Kubernetes 控制器…

Python考试练习题---day1

1.计算2的n次幂结果的后3位 获得用户输入的一个数字N,计算并输出2的N次幂结果的后3位。 【输出样例】-----因为2的10次方等于1024 输入10输出024 ninput() print(str(2**eval(n))[-3:]) 2.分割四位正整数 例1: 编写程序,提示用户从键盘…

[Redis]String类型

基本命令 set命令 将 string 类型的 value 设置到 key 中。如果 key 之前存在,则覆盖,无论原来的数据类型是什么。之前关于此 key 的 TTL 也全部失效。 set key value [expiration EX seconds|PX milliseconds] [NX|XX] 选项[EX|PX] EX seconds⸺使用…

vscode+docker搭建迷你开发环境。制作docker镜像,并通过vscode连接后进行开发

制作自己的docker镜像,将docker镜像作为服务器,接受vscode连接 目录 1. 制作开发环境镜像 1.1 选择基础镜像 1.2 编写dockerfile 1.3 构建镜像 2. 启动镜像 3. 添加用户 3.1 查看物理机上用户信息 3.2 登录到docker中 3.3 按照物理机的用户和组…

在visual studio 2022中编译yaml-cpp 32位静态库的严重踩坑问题解决过程

使用vcpkg 引入yaml-cpp把程序调试好了,但是分发的时候不想带着yaml-cpp的动态链接库文件,所以参考网上的文章想进行程序的静态编译,关于如何编译yaml-cpp的静态库网上有很多文章,而且去看yaml-cpp的github官方说明文件人家说你啥都不干就是默认编译为静态库了,好家伙,兴…

MySQL主从复制故障:“ Slave_SQL_Running:No“ 两种解决办法

问题 今天搭建MySQL的主从复制,查看从机状态时show slave status\G,发现这个参数为NO,导致主从复制失败。 Slave_SQL_Running: No 后面上网查阅了一下资料,大概就是因为在连接支持数据库后,也就是这个命令后&#xff…

Python 应用开发:Streamlit 布局篇(容器布局)

st.columns 以并列方式插入容器。 插入若干并排排列的多元素容器,并返回一个容器对象列表。 要在返回的容器中添加元素,可以使用 with 符号(首选)或直接调用返回对象的方法。请参见下面的示例。 列只能放置在其他列的内部&…

word如何创造新的格式标题

1 效果如下:(标题命名默认音序排序) 2 创建 选中自己喜欢的标题,修改字号字体,then 3 修改 注意要点如下: 后续:以上操作可能导致后续一级标题不能折叠二级标题,目录导航栏也不能…

QListWidget详解

QListWidget详解 QListWidget 是 PyQt5 中一个方便的部件,用于创建和管理列表。它继承自 QListView,并提供了一些高级功能,使得添加和管理列表项更加简单。以下是 QListWidget 的详解,包括基本用法、主要方法和属性以及如何与其他…

张驰咨询:六西格玛培训,IT界的“福尔摩斯”

六西格玛,这个曾以制造业为背景的管理理念,如今却在IT领域大放异彩。其背后的原因,不仅仅是因为六西格玛追求零缺陷、持续改进的核心价值观与IT行业对产品质量和用户体验的极致追求不谋而合,更是因为它提供了一种全新的思维方式和…

全球首个,985重大突破!

据长江日报消息,今年7月,华中科技大学团队研发的全球首台用于肌骨的新式B超将正式进入临床阶段,刚刚完成临床、用于乳腺的B超也即将上市。 据了解,华中科技大学生物医学工程学院丁明跃、尉迟明教授团队,自2010年以来一…

调试面对面翻译小程序

调试面对面翻译小程序 文章目录 调试面对面翻译小程序预览1.拉取项目2.在微信开发者工具打开使用 微信版本要求微信同声传译插件支持功能 此demo用于学习 预览 1.拉取项目 git clone https://github.com/Tencent/Face2FaceTranslator或者(加速镜像) git …

905. 按奇偶排序数组 - 力扣

1. 题目 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 2. 示例 3. 分析 开辟一个数组res用来保存操作过后的元素。第一次遍历数组只插入偶数,第二次遍历数组…

【Spring-01】BeanFactory和ApplicationContext

【Spring-01】BeanFactory和ApplicationContext 1. 容器接口1.1 什么是 BeanFactory1.2 BeanFactory 能做什么? 1. 容器接口 以 SpringBoot 的启动类为例: /*** BeanFactory 与 ApplicationContext的区别*/ SpringBootApplication public class Spring…

拉普拉斯IPO:新能源产业快速发展,为低碳转型注入强劲动力

近年来,我国新能源产业快速发展,为全球绿色低碳转型注入强劲动力。国际人士认为,中国新能源产业快速发展,得益于超大规模市场优势、完整的工业体系和丰富的人力资源,得益于企业对研发创新的巨大投入,我国市…