RPC(Remote Procedure Call),即远程过程调用。它允许像调用本地服务一样调用远程服务。
RPC是一种服务器-客户端(Client/Server)模式,经典实现是一个通过发送请求-接受回应进行信息交互的系统。
RPC 让远程调用就像本地调用一样,其调用过程可拆解为以下步骤。

实际运用
当某些功能用 Go 实现更高效,而业务主逻辑又依赖 Python 时,需要一种 “在 Python 中像调用自定义函数一样调用 Go 代码” 的方案。这种需求能通过多种方式实现,既保留 Go 的性能优势,又兼顾 Python 的易用性,现在讲基于rpc方式来实现
案例演示
import socket
import json
request = {
"id": 0,
"params": [{"x":1, "y":2}], # 参数对应上Args结构体
"method": "ServiceA.Add"
}
client = socket.create_connection(("127.0.0.1", 9091),5)
client.sendall(json.dumps(request).encode())
rsp = client.recv(1024)
rsp = json.loads(rsp.decode())
print(rsp)

go代码如下
package main
import (
"log"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type Args struct {
X, Y int
}
type ServiceA struct{}
func (s *ServiceA) Add(args *Args, reply *int) error {
*reply = args.X + args.Y
returnnil
}
func main() {
service := new(ServiceA)
rpc.Register(service)
l, e := net.Listen("tcp", ":9091")
if e != nil {
log.Fatal("listen error:", e)
}
for {
conn, _ := l.Accept()
rpc.ServeCodec(jsonrpc.NewServerCodec(conn))
}
}
Go 端将功能封装为 RPC 服务(如ServiceA.Add),监听端口;Python 端通过网络请求(遵循 RPC 协议)传递参数,获取返回值,代码层面只需构造参数和解析结果
#Python #Rpc #Go