怎么在python中远程调用rpc模块中的xmlrpclib方法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
rpc(远程过程调用协议)是远程调用协议,它通过网络请求服务到远端服务器,服务器根据请求做出响应,将结果返回
它是一种C/S模式,客户端可以调用远程服务器上的参数(类似URL)并返回结果
利用rpc可以实现系统的分布式架构,可以将功能分解到多台服务器上进行实现,同时也将也可以将负载打散,分布到不同服务器上,整合计算资源
在openstack中就大量使用了rpc
rpc多使用http传输请求,格式有xml、json等,这里是xml
模块:
<强> xmlrpclib 强>
注:xmlrpclib模块在python3中重命名为xmlrpc.client
xmlrpc并不是很安全,但在2.7.9 https URL中默认加入了证书,主机名验证
定义:
class xmlrpclib.ServerProxy (uri(,运输(,编码[,冗长的[,allow_none [, use_datetime[,上下文]]]]]])
1. uri,即服务端URL的地址
2。运输传输实例,可选,https url/http
3.编码4。详细的是调试模式
5。allow_none是否请求空,若为真,那么常量都将被翻译成xml,默认如果是没有则抛出异常TypeError
6。use_datetime可以使用日期/时间值记录调用时间datetime.datetime,默认是假
<强> ServerProxy对象提供一些默认的方法:强>
1. serverproxy.system.listmethods()返回远端服务器方法列表
2. serverproxy.system.methodsignature(名字)方法签的名,是一个数组类型
3. serverproxy.system.methodhelp(名字)方法帮助信息
例如一个简单的示例:
服务端:
import xmlrpclib 得到SimpleXMLRPCServer import  SimpleXMLRPCServer def get_power (n, m): return n * * m 时间=server SimpleXMLRPCServer (“0.0.0.0",, 8081)) print “start  service get  power 提醒0.0.0.0 8081…“; server.register_function (get_power,“get_power") server.serve_forever ()
客服端:
import xmlrpclib 时间=server_power xmlrpclib.ServerProxy (“http://192.168.137.9:8081”) print “3 * * 2,=, % d", % (server_power.get_power (3 2)) print “2 * * 5,=, % d", % (server_power.get_power (2、5)
结果:
服务端:
#, python xml_server.py start service  get power 提醒0.0.0.0 8081… 192.168.137.9 安康安康;[22/可能/2017,10:37:47],“POST /, HTTP/1.1“200, - 192.168.137.9 安康安康;[22/可能/2017,10:37:47],“POST /, HTTP/1.1“, 200年,——
客服端:
#, python xml_client.py 3 * * 2,=,9 32 2 * * 5,=,
<强> xmlrpclib提供的一些方法:强>
类xmlrpclib。DateTime时间对象
例如:
服务端:
import DateTime 得到SimpleXMLRPCServer import  SimpleXMLRPCServer import xmlrpclib def 今天():=,,today  datetime.datetime.today () ,return xmlrpclib.DateTime(今天) 时间=server SimpleXMLRPCServer (“0.0.0.0",, 8081)) print “start service 提醒0.0.0.0 8081…“; server.register_function(今天,“today") server.serve_forever ()
客服端:
import xmlrpclib import datetime 时间=s xmlrpclib.ServerProxy (“http://192.168.137.9:8081”) 时间=today 年代() 时间=converted datetime.datetime.strptime (today.value,“% Y % m % dT % H: % m: % S") print “;今天,% s", %, converted.strftime (“Y % d % m . %,, % H: % M")
结果:
服务端
#, python rpc_time.py start service 提醒0.0.0.0 8081… 192.168.137.9 安康安康;[22/可能/2017,10:43:19],“POST /, HTTP/1.1“, 200年,——
客服端:
#, python rpc_time_client.py 今天,22.05.2017,十43
2。类xmlrpclib。二进制二进制对象
3。类xmlrpclib。网络故障对象
如:
客服端:
import xmlrpclib 时间=s xmlrpclib.ServerProxy (“http://192.168.137.9:8081”) 试一试: 2,5,s.add () except xmlrpclib.Fault  as 错: ,print “A fault  occurred" ,print “Fault 代码:,% d", % err.faultCode ,print “Fault 字符串:,% s" %,犯错。faultString怎么在python中远程调用rpc模块中的xmlrpclib方法