初识grpc

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不可恢复的数据丢失或损坏
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值