初识grpc

news/2025/2/11 22:12:38/

gRPC

特性gRPCRESTful API
规范必须.proto可选OpenAPI
协议HTTP/2任意版本 HTTP
有效载荷ProtoBuf(小、二进制)JSON (大、易读)
浏览器支持否(需要 grpc-web)
流传输客户端、服务端、双向客户端、服务端
代码生成OpenAPI + 第三工具

gRPC 远程过程调用 (Remote Procedure Call)调用包含传输协议和编码、协议。允许一台计算机上的程序调用另一台计算上的子程序,而开发人员无须额外为这个交互编程。

gRPC 基于HTTP/2 拥有双向流、流控、头部压缩、但TCP链接上的多复用请求等特性

Protobuf 相比JSON、XML区别

  • 文件跟小啊(1/10 - 1/3)
  • 解析速度 20-100倍
  • 减少了二义性
  • 生成了更易使用的额数据访问类
  • 序列化和反序列化跟快
  • 传输过程中不需要过多关注其内容

gRPC通过 HTTP/2 对流传输提供了大量支持

  • Unary RPC:一元RPC
  • Server-side streaming RPC:服务端流式RPC
  • Client-side streaming RPC:客户端流式 RPC
  • Bidirectional streaming RPC: 双向流式 RPC

缺点

  • 不易读
  • 不支持浏览器
  • 支持插件少
protoc --go_out=plugins=grpc:. ./proto/*.proto 

需要注意的一点是,我们在 tag.proto 文件中 import 了 common.proto,因此在执行 protoc 命令生成时,如果你只执行命令 protoc --go_out=plugins=grpc:. ./proto/tag.proto 是会存在问题的。

因此建议若所需生成的 proto 文件和所依赖的 proto 文件都在同一目录下,可以直接执行 ./proto/*.proto 命令来解决,又或是指定所有含关联的 proto 引用 ./proto/common.proto ./proto/tag.proto ,这样子就可以成功生成.pb.go 文件,并且避免了很多的编译麻烦。

但若实在是存在多层级目录的情况,可以利用 protoc 命令的 -I 和 M 指令来进行特定处理。

codestatusnotes
0ok
1cancelled操作被调用方取消
2unknown未知错误
3invalid_argument无效的参数
4deadline_exceeded在操作完成之前超过了约定的最后期限
5not_found找不到
6already_exists已经存在
7permission_denied权限不足
8resource_exhausted资源耗尽
9failed_precondition该操作被拒绝,因为未处于执行该操作需的状态
10aborted该操作被终止
11out_of_range超出范围,尝试执行的操作超出了约定的有效范围
12unimplemented未实现
13internal内部错误
14unavailable该服务当前不可用
15data_loss不可恢复的数据丢失或损坏

http://www.ppmy.cn/news/12432.html

相关文章

九、MySQL 常用函数汇总(2)

文章目录一、条件判断函数1.1 IF(expr,v1,v2)函数1.2 IFNULL(v1,v2)函数1.3 CASE函数二、系统信息函数2.1 获取MySQL版本号、连接数和数据库名的函数2.2 获取用户名的函数2.3 获取字符串的字符集和排序方式的函数2.4 获取最后一个自动生成的ID值的函数三、加密函数3.1 加密函数…

C进阶:动态内存函数 malloc calloc realloc free及常见动态内存开辟错误

本文主要讲解动态内存开辟的有关知识。 目录 一.malloc 与 free 1.malloc 2.free 3.实例: 二.calloc 三.realloc 四.常见的动态内存错误 1.对NULL指针的解引用操作 2.对动态开辟空间的越界访问 3.对非动态开辟内存使用free释放 4.使用free释放一块动态…

linux基本功系列之pwd命令实战

本文目录 文章目录一. pwd命令介绍二. 语法格式及常用选项2.1 语法格式2.2 常用参数三. 参考案例3.1 显示所在目录的完整路径3.2 显示符号链接的路径 -P 参数3.3 查看上一次所在的工作目录3.4 查看PWD的版本四. pwd的命令类型总结前言🚀🚀🚀 …

React--》超详细教程——React脚手架的搭建与使用

目录 React脚手架的创建 全局安装创建 npx安装创建(官方推荐) 指定React版本安装 脚手架文件介绍 React脚手架是开发现代Web应用的必备,其充分利用Webpack、Babel、ESlint等工具辅助项目的开发,当然这些工具也无需手动配置即可使用,脚手…

结构分析软件:2D Frame Analysis 7.2.6 Crack

结构分析软件:2D Frame Analysis 7.2.6 用于在静态、动态、线性和非线性载荷下对框架、梁和桁架进行结构分析的软件工具。它包括静态版和桁架版的所有功能 2D 框架分析软件套件以及处理动态负载的能力。自动计算结构的动态模态,并以图形方式表示相应的模…

Mybatis学习笔记(三)

连接池 我们在实际开发中都会使用连接池,因为它可以减少我们获取连接所消耗的时间 mybatis中的连接池 mybatis连接池提供了3种方式的配置 配置的位置 主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式 type属性的取…

你是真的“C”——详解C语言数组模块知识

详解C语言数组模块知识😎前言🙌一维数组的创建和初始化🙌1.1 数组的创建💞1.2 数组的初始化💞1.3 一维数组的使用💞1.4 一维数组在内存中的存储💞二维数组的创建和初始化🙌1.1 二维数…

Java加解密(八)数字证书

目录数字证书1 定义2 证书组成结构3 公钥基础设施(PKI)3.1 PKI的组成3.2 PKI的相关标准3.3 信任模型4 证书的应用场景5 证书链6 生成证书6.1 通过CA生成可信证书6.1.1 国际权威认证机构6.1.2 生成CSR6.1.2.1 使用XCA生成CSR6.1.2.2 使用OpenSSL生成CSR6.…