💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] ## **1.RPC介绍** RPC(Remote Procedure Call),即远程过程调用。 RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。 RPC(远程过程调用)对应的是本地过程调用。 ## **2.本地过程调用** ~~~ package main import "fmt" func add(x, y int) int { return x + y } func main() { a := 10 b := 20 ret := add(a, b) fmt.Println(ret) } ~~~ 本地调用`add`函数的执行过程,可以理解为以下四步: 1. 将变量a和b的值分别压入堆栈上 2. 执行add函数,从堆栈中获取a和b的值,并将它们分配给x和y 3. 计算x+y的值并将其保存到堆栈中 4. 退出add函数并将x+y的值赋给ret ## **3.RPC调用** 本地过程调用发生在同一进程中,定义函数和调用函数的代码共享同一个内存空间,所以调用能够正常执行。 但是无法在另一个程序上调用add函数,因为两个程序的内存空间是相互隔离的。 RPC就是解决类似远程、跨内存空间、函数/方法调用的。 gRPC分为三种类型 * Server-side streaming RPC:服务器端流式 RPC * Client-side streaming RPC:客户端流式 RPC * Bidirectional streaming RPC:双向流式 RPC Simple RPC的缺点: 数据包过大造成的瞬时压力 接收数据包时,需要所有数据包都接受成功且正确后,才能够回调响应,进行业务处理(无法客户端边发送,服务端边处理)