RPC (remote procedure call) - 相关学习和总结
文章目录
一、概念总结
RPC - 远程过程调用(协议):一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议。
服务器A、B,分别各自部署不同的应用a、b;a 调用 b 的函数,由于不是同一个内存空间,所以需要通过中间处理,将命令传输给 B 最后返回给 A 的 a。
1-1 RPC 的基本流程
- client - server 通过协议(TCP、UDP等)进行连接
- 寻址,通过主机、IP地址、端口、方法名等进行目标的查询
- client 发起远程调用时,需将参数序列化成二进制进行传输,并以寻址路线将二进制数据交与server
- server 获取请求后,将数据进行反序列化,本地调用相关函数,并将结果序列化返回 client
- client 接收响应,反序列化数据,交与相关应用。
1-2 RPC vs REST
REST
- 面向资源,以名词为主的调用,基于 CRUD 等进行基本操作
- e.g. DELETE /user/1
- 通常应用于B/S架构
- 一般基于 HTTP 协议
RPC
- 面向命令,以动词为主的调用,多数仅仅只有 get 和 post
- e.g. POST /deleteUser + { “id”: 1 }
- 通常应用于C/S架构,多应用于跨语言夸平台的服务调用
- 一个完善的RPC架构通常包含代码生成,通信规范等
- 可以通过 socket、http、操作系统自带的管道等技术
二、RPC 下的 client 和 server - go
2-1 server 端
// server
package main
import (
"errors"
"log"
"net"
"net/http"
"net/rpc"
"os"
"time"
)
type Args struct {
A, B int
}
type Quotient struct {
Quo, Rem int
}
type Arith int
//计算乘积
func (t *Arith) Multiply(args *Args, reply *int) error {
time.Sleep(time.Second * 3) //睡三秒,同步调用会等待,异步会先往下执行
*