基于python实现RPC的demo
这是一个远程过程调用(RPC)的实现demo,可以实现不同的python进程之间通信和互相调用函数,简单易用,易于扩展。更多功能也可进一步完善,本文介绍了该实现的主要思路。
前言
计划手撸一个rpc甚久了,在间歇性push自己下终于完成的差不多了。写这个demo的原因,1)是为了学习与思考下这部分主体功能和实现思路,2)是调包时可以毫无心理负担,并产生一种不过如此的优越感。
实现这部分内容主要依据的还是自己的想法,因此可能会有bug或者有更好的实现方式,仅供学习和参考,完整代码可参考Gitee链接。
实现的时候用的是python2.7
,忘记换了,下次一定更新。
一、主要内容
所谓RPC,是远程过程调用(Remote Procedure Call)的简写,网上解释很多,简单来说,就是在当前进程调用其他进程的函数时,体验就像是调用本地写的函数一般。
本文实现的是在本地调用远端的类class
对象的接口,也就是本地的client
不实例化类对象,调用的是server
端的类对象接口。
为了达到让调用层无须关心底层实现,拥有丝滑般的体验,就需要以下几个部分:
- 客户端需要把类的接口提取出来,并将调用函数事件捕获存储起来;服务端需要把类的公有函数作为可远程调用的接口。
- 客户端把调用函数的事件(调用的函数,参数)进行序列化并发送给服务端;服务端将客户端的调用事件反序列化,并执行相应的接口,将返回值发送给客户端。
- 客户端与服务端通过某种方式(一般就是网络socket)进行通信。
在下面时序图的灰色部分,对于调用方来说是透明的,它的执行结果应该和执行本地的函数时一致的。