什么是PRC&GRPC
RPC是远程过程调用(Remote Procedure Call)的缩写形式, RPC 的主要功能目标是让构建分布式计算(应用)更容易,在提供强大的远程调用能力时不损失本地调用的语义简洁性。通俗地讲,使用RPC进行通信,调用远程函数就像调用本地函数一样,RPC底层会做好数据的序列化与传输。 下图是dubbo rpc实现的图解,以便于大家理解RPC:

GRPC是rpc框架的实现,是一个基于Protobuf序列化协议开发的高性能,开源和通用的RPC框架,且支持众多开发语言。

从图中还可以看出,proto文件的编译支持多种语言(Go、Java、Python等),可以轻松实现跨语言调用。
RPC调用之前需要进行IDL文件定义编写和对应语言调用模板方法生成(protoc自动生成)
RPC调用大致步骤:
- 客户端建立连接(gRPC Stub)并调用A方法,发起RPC调用
- gRPC框架对请求信息使用Protobuf进行对象序列化压缩(IDL)
- 服务端(gPRC Server)接收到请求后,解码反序列化,进行业务逻辑处理并返回。
- 对响应结果使用Protobuf进行对象序列化压缩(IDL)
- 客户端接受到服务端响应,解码发序列化。回调被调用的A方法,唤醒正在等待响应(阻塞)的客户端调用并返回响应结果。
Go gRPC 环境准备
本人是在WSL环境(window linux 子系统)进行的,window 和 mac 可以自行尝试,原理和步骤都一样。
- Go 语言环境安装,下载对应的安装包,配置GOPATH、GOROOT、GOPROXY,以及GO111MODULE 设置为on,具体安装和配置细节可参考官网和其他教程,这里列出自己的go env信息:
# GO111MODULE on模式
GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/home/lizheng/.cache/go-build"
GOENV="/home/lizheng/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/home/lizheng/gopath/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
# GOPATH 配置
GOPATH="/home/lizheng/gopath"
GOPRIVATE=""
# GOPROXY 配置
GOPROXY="https://goproxy.cn"
# GOROOT 配置
GOROOT="/home/lizheng/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/home/lizheng/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.17.7"
GCCGO="gccgo"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS

RPC是远程过程调用,使分布式计算更简单,而gRPC是一个基于Protobuf的高性能RPC框架,支持多语言。文章详细介绍了gRPC的工作流程,包括Proto文件的编译、RPC调用步骤,并展示了在Go环境下安装配置gRPC和ProtocolBuffer的步骤,以及编写gRPC服务端和客户端的示例代码。
最低0.47元/天 解锁文章
962

被折叠的 条评论
为什么被折叠?



