=Start=
缘由:
简单记录一下学习和了解gRPC相关的概念和知识点的内容,方便以后参考。
正文:
参考解答:
1、RPC框架原理
RPC 框架的目标就是让远程服务调用更加简单、透明,RPC 框架负责屏蔽底层的传输方式(TCP 或者 UDP)、序列化方式(xml/json/ 二进制)和通信细节。让服务调用者可以像调用本地接口一样调用远程的服务提供者,而不需要关心底层通信细节和具体调用过程。
RPC 框架的调用原理图如下所示:
2、gRPC简介
gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。
gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。
3、gRPC的常规使用方法
gRPC的使用通常包括如下几个步骤:
①通过protobuf来定义接口和数据类型
②使用protobuf编译器生成创建应用所需的特定客户端和服务端的代码
③编写gRPC server端代码
④编写gRPC client端代码
下面以Python为例简单过一遍环境准备&代码开发的流程:
# 首先确保你的 pip 是 9.0.1 或以上版本
$ python -m pip install --upgrade pip
# 然后安装VirtualENV创建测试环境,避免对系统环境产生影响
$ python -m pip install virtualenv
$ virtualenv venv
$ source venv/bin/activate
$ python -m pip install --upgrade pip
# 安装gRPC
$ python -m pip install grpcio
# 安装gRPC tools
$ python -m pip install grpcio-tools
&
# 编写 .proto 文件(包含 syntax/service/message 等几个简单必要字段就行)
## .proto 文件中的 service 和 message 名称会对下面的 server/client 端代码编写有影响,记得一一对应
# 借助gRPC的编译工具生成相关代码(xxx_pb2.py 和 xxx_pb2_grpc.py)
$ python -m grpc_tools.protoc -I../../protos --python_out=. --grpc_python_out=. ../../protos/helloworld.proto
# 编写 gRPC 的 server 端代码(需要对其中的模式有一定了解,好在编码时import需要的模块及其相关的类)
# 编写 gRPC 的 client 端代码(需要对常规的编码流程有一定了解)
# 先启动 server 端,再在另一个终端中启动 client 端以进行测试
参考链接:
- 深入浅出 gRPC 01:gRPC 服务端创建和调用原理
- 深入浅出 gRPC 05:gRPC 安全性设计
- 谁能用通俗的语言解释一下什么是 RPC 框架?
https://www.zhihu.com/question/25536695 - 深入了解 gRPC:协议
- gRPC服务端创建详解与调用原理解析
- GRPC原理解析
- gRPC详解
- ProtoBuf 与 gRPC 你需要知道的知识
- gRPC 官方文档中文版
https://doc.oschina.net/grpc?t=56831 - gRPC 基础: Go
https://doc.oschina.net/grpc?t=60133 - gRPC的一些概念(gRPC Concepts)
https://www.grpc.io/docs/guides/concepts/ - https://github.com/grpc/grpc/blob/v1.22.0/examples/protos/helloworld.proto
https://github.com/grpc/grpc/tree/master/examples/python/helloworld - google grpc 介绍
- 带入gRPC:TLS 证书认证
https://segmentfault.com/blog/eddycjy - 了解gRPC一篇就够了
- 漫谈gRPC
- gRPC-Go服务端源码分析
- gRPC 的介绍以及实践
- 通过 gRPC 传递 Request ID
- gRPC的那些事 – streaming
- gRPC的那些事 – interceptor
- 对python调用RPC接口的实例详解
- Golang grpc实例
https://github.com/markbest/go-grpc-example
=END=
《 “gRPC简单学习了解” 》 有 6 条评论
Protobuf 终极教程
https://colobu.com/2019/10/03/protobuf-ultimate-tutorial-in-go/
`
历史
序列化
proto教程
proto3的改变
一个简单的例子
proto3 格式
版本定义
引入其它proto文件
package
option
普通字段
Oneof
map类型
Reserved
枚举类型
使用其它类型
嵌套类型
未知类型
Any
更新消息类型
其它
Well-Known类型
编码
gogo库
`
分布式服务框架gRPC
https://mp.weixin.qq.com/s/lJat7npy_NbVBDjpn9prkg
用Golang构建gRPC服务
https://mp.weixin.qq.com/s/2Opr-MBLmdNyOyrL3UAfLA
一文带你搞懂RPC核心原理
https://mp.weixin.qq.com/s/3-i9aYyEb4z58fXxDwDpuA
在Go中使用Protobuf
https://mp.weixin.qq.com/s/pPzSrL5_JNHlihuReMlYfg
IDEA java开发 grpc框架的服务端和客户端–helloworld实例
https://blog.csdn.net/qq_29319189/article/details/93539198
grpc-java入门实例
https://blog.csdn.net/hzygcs/article/details/104729274/
https://grpc.io/docs/languages/java/quickstart/
https://mvnrepository.com/artifact/io.grpc
https://github.com/grpc/grpc-java
gRPC初探
https://blog.csdn.net/jek123456/article/details/53395242
java grpc简单例子
https://blog.csdn.net/z69183787/article/details/82562567
protobuf 归纳
https://blog.csdn.net/mynameislu/article/details/78645880
Protobuf3语法详解
https://www.cnblogs.com/tohxyblog/p/8974763.html
通讯协议序列化解读(一) Protobuf详解教程
https://www.cnblogs.com/tohxyblog/p/8974641.html
gRPC,爆赞
https://mp.weixin.qq.com/s?__biz=MzI3MjY1ODI2Ng==&mid=2247484210&idx=1&sn=7d26f0d5ecf68704b75fcad76f42a68f&scene=21
`
# 介绍
gRPC 是 Google 公司基于 Protobuf 开发的跨语言的开源 RPC 框架。gRPC 基于 HTTP/2 协议设计,可以基于一个 HTTP/2 链接提供多个服务,对于移动设备更加友好。
# 入门
首先来看一个最简单的 gRPC 服务,第一步是定义 proto 文件,因为 gRPC 也是 C/S 架构,这一步相当于明确接口规范。
然后使用 protoc-gen-go 内置的 gRPC 插件生成 gRPC 代码:
protoc –go_out=plugins=grpc:. helloworld.proto
执行完上面这个命令之后,会在当前目录生成一个 helloworld.pb.go 文件,文件中分别定义了服务端和客户端的接口。
接下来就是写服务端和客户端的代码,分别实现对应的接口。
server: …
client: …
这样就完成了最基础的 gRPC 服务的开发,接下来我们就在这个「基础模板」上不断丰富,学习更多特性(流处理模式,验证器,Token 认证和证书认证)。
`
使用 grpcurl 通过命令行访问 gRPC 服务
https://mp.weixin.qq.com/s/GShwcGCopXVmxCKnYf5FhA
https://github.com/fullstorydev/grpcurl
BloomRPC
https://appimage.github.io/BloomRPC/
https://github.com/uw-labs/bloomrpc