rpc的简单理解
2016-04-18
概念
rpc
,全称Remote Procedure Call
,即远程过程调用
一般的函数调用都是本地的调用相同物理空间内的函数, 而rpc
则可以调用远程的函数
,从而可以将方便的实现分布式的代码部署, 将某些代码块置于符合需求的服务器上, 比如将消耗cpu的函数置于cpu比较强的服务器, I/O较多的函数置于较好磁盘(ssd,固态硬盘等)的服务器
理解
我对rpc的理解:
rpc是一种与rest类似的通信机制, 都是要向服务端传递参数并获取某些结果, 只不过这个机制看起来像是函数调用机制。
rpc 不仅仅支持 http
, 还支持其他的一些协议甚至是自定义协议
服务端伪代码:
def function_name(a,b):
...
return result
s = service_process()
s.listen(8888) #服务需要绑定端口
s.add(function_name) #需要将对外开放的函数注册了, rpc的客户端才能调用
s.start()
客户端伪代码
...
c = client_process(serverip:serverport) #连接rpc服务端
c.function_name(a,b) #这里的function_name 就是服务端的函数
客户端对服务端函数的调用非常透明, 使用的时候非常容易
实践
python 的SimpleXMLRPCServer
可以实践rpc服务端注册和客户端调用
这里我们简单的让客户端远程调用服务端的s_add 函数
server.py
from SimpleXMLRPCServer import SimpleXMLRPCServer
def s_add(a,b):
return a + b
s = SimpleXMLRPCServer(("0.0.0.0",8888))
s.register_function(s_add) #s_add 是在服务端实现的
s.serve_forever()
客户端调用
client.py
import xmlrpclib
c = xmlrpclib.ServerProxy("http://127.0.0.1:8888") #创建连接
a = 1
b = 2
res = c.s_add(a,b) # rpc 调用
print "rpc: s_add(%d,%d)=%d" %(a,b, res)
分别运行server.py和client.py, 在运行客户端时会输出
rpc: s_add(1,2)=3
正是我们远程函数的执行结果
总结
rpc 成功地将项目的代码以分布式的方式部署, 并方便的调用, 这种方式与http的传统的请求响应模式一样, 但又不相同。