怎么在python中远程调用rpc模块中的xmlrpclib方法

  介绍

怎么在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方法