如何使用远程过程调用
- 服务器端
- 提供函数
- 绑定地址和端口
- 注册函数
- 启动服务器并等待
——- - 获取被调用函数名
- 调用函数并返回结果
- 客户端
- 连接服务器
- 调用函数
——- - 接收结果
xmlrpc
# -*- coding:utf-8 -*-
import xmlrpclib
from SimpleXMLRPCServer import SimpleXMLRPCServer
# server
def double(num):
return num * 2
server = SimpleXMLRPCServer(("localhost",6789))
server.register_function(double, "double")
server.serve_forever()
# -*- coding:utf-8 -*-
import xmlrpclib
# client
proxy = xmlrpclib.ServerProxy("http://localhost:6789/")
num = 7
result = proxy.double(num)
print("Double %s is %s" %(num, result))
msgpackrpc
# -*- coding:utf-8 -*-
from msgpackrpc import Server, Address
# server
class Services():
def double(num):
return num * 2
server = Server(Services())
server.listen(Address("localhost",6789))
server.start()
# -*- coding:utf-8 -*-
from msgpackrpc import Client, Address
# client
client = Client(Address("http://localhost",6789))
num = 7
result = client.call("double",num)
print("Double %s is %s" %(num, result))
fabric
# -*- coding:utf-8 -*-
from fabric.api import run
def iso():
run('date -u')
# fab -f temp_server.py -H localhost iso
salt(基于ZeroMQ,fabric)
puppet
chef
ansible(fabric)
什么是远程过程调用
远程过程调用(RPC)类似在联网的远程机器上,运行函数。
RPC由RPC客户端和远程机器组成;
RPC客户端的工作原理
1. 编码/编组/序列化,即把函数参数转化为比特
2. 数据发送,即把比特发送给远程机器
- 数据接收,即接收转码后的比特
- 反序列化,即把比特转化为函数返回值
远程机器的工作原理 - 数据接收,即接收转码后的比特
- 反序列化,即把比特转化为函数参数
- 函数调用,即查找本地目标函数并调用,之后输出函数返回值
- 编码/编组/序列化,即把函数返回值转化为比特
5 数据发送,即把比特发送给RPC客户端
为何使用远程过程调用
通过联网的机器,可以操作更多的进程和线程。