首页 > 开发 > Python > 正文

python远程调用rpc模块xmlrpclib的方法

2024-09-09 19:02:29
字体:
来源:转载
供稿:网友

RPC(Remote Procedure Call Protocol)是远程调用协议,它通过网络请求服务到远端服务器,服务器根据请求做出响应,将结果返回

它是一种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[, transport[, encoding[, verbose[, allow_none[, use_datetime[, context]]]]]])

1.uri,即服务端的url地址

2.transport 传输实例,可选,https urls/http

3.encoding

4.verbose 是debug模式

5.allow_none 是否请求空 ,若为True,那么常量none将被翻译成xml,默认如果是none则抛出异常 TypeError

6.use_datetime 可以使用date/time values记录调用时间datetime.datetime,默认是false

ServerProxy对象提供一些默认的方法:

1.ServerProxy.system.listMethods() 返回远端服务器方法列表

2.ServerProxy.system.methodSignature(name) 方法签名,是一个数组类型

3.ServerProxy.system.methodHelp(name) 方法帮助信息

例如一个简单的示例:

服务端:

import xmlrpclibfrom SimpleXMLRPCServer import SimpleXMLRPCServerdef get_power(n,m): return n**mserver = SimpleXMLRPCServer(("0.0.0.0", 8081))print "start service get power on 0.0.0.0 8081..."server.register_function(get_power, "get_power")server.serve_forever()

客服端:

import xmlrpclibserver_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 on 0.0.0.0 8081...192.168.137.9 - - [22/May/2017 10:37:47] "POST / HTTP/1.1" 200 -192.168.137.9 - - [22/May/2017 10:37:47] "POST / HTTP/1.1" 200 -

客服端:

# python xml_client.py 3**2 = 92**5 = 32

xmlrpclib提供的一些方法:

class xmlrpclib.DateTime 时间对象

例如:

服务端:

import datetimefrom SimpleXMLRPCServer import SimpleXMLRPCServerimport xmlrpclibdef today(): today = datetime.datetime.today() return xmlrpclib.DateTime(today)server = SimpleXMLRPCServer(("0.0.0.0", 8081))print "start service on 0.0.0.0 8081..."server.register_function(today, "today")server.serve_forever()

客服端:

import xmlrpclibimport datetimes = xmlrpclib.ServerProxy("http://192.168.137.9:8081/")today = s.today()converted = datetime.datetime.strptime(today.value, "%Y%m%dT%H:%M:%S")print "Today: %s" % converted.strftime("%d.%m.%Y, %H:%M")

结果:

服务端

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表