本文介绍go里的rpc开发的知识点与相关使用场景。
什么是RPC
RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。
RPC vs REST
- RPC主要是基于TCP/IP协议的,而REST服务主要是基于HTTP协议的
- REST通常以业务为导向,将业务对象上执行的操作映射到HTTP动词,格式非常简单。
- REST也存在一些弊端,比如只支持请求/响应这种单一的通信方式,对象和字符串之间的序列化操作也会影响消息传递速度。在单个请求获取多个资源时存在着挑战,而且有时候很难将所有的动作都映射到HTTP动词。比如注册、授权等等。
- 由于HTTP在应用层中完成,整个通信的代价较高,远程过程调用中直接基于TCP进行远程调用,数据传输在传输层TCP层完成,更适合对效率要求比较高的场景,RPC主要依赖于客户端和服务端之间建立Socket链接进行,底层实现比REST更复杂。
主流的RPC框架
主要用的就是GRPC,Thrift,Dubbo这三个,下面分别介绍下使用方式。
GRPC
GRPC是Google最近公布的开源软件,基于最新的HTTP2.0协议,并支持常见的众多编程语言(Golang,C++,Java,Php,Python等等)。
安装
建议先配置go module代理。否则不开VPN下载速度可能会很慢,也许直接下载失败。1
2
3
4
5
6// 安装protobuf插件
go get -u github.com/golang/protobuf/protoc-gen-go
// 再去下载protoc,地址:https://github.com/golang/protobuf/releases
unzip protoc-x.x.x-linux-x86_64.zip -d /usr/local/
// 查看版本
protoc --version示例1 校验用户
目录结构如下:1
2
3
4
5
6
7
8.
├── client # 客户端
│ └── main.go
├── proto
│ └── user_auth.proto
└── server # 服务端
└── main.go