Python中关于XML-RPC原理
来源:互联网 发布:java子类方法重写 编辑:程序博客网 时间:2024/05/20 19:31
转自http://www.cnblogs.com/wanghaoran/p/3189017.html
SimpleXMLRPCServer模块为XML-RPC服务端的写入提供了一个基本的框架。利用SimpleXMLRPCServer服务器既可以一直空闲,也可以利用CGIXMLRPCRequestHandler来嵌入到一个CGI环境中。
XML-RPC(Remote Procedure Call)是通过HTTP传输协议,利用XML格式的远端程序调用方法。客户端可以调用服务端带参数的方法并获取返回的结构数据。(服务端的名字是一个URI)。这个模块支持写入XML-RPC端的代码。它用来处理所有转换的细节在在整合的Python对象和XML报文之间。
Eg1服务端代码:
from SimpleXMLRPCServer import SimpleXMLRPCServerfrom SimpleXMLRPCServer import SimpleXMLRPCRequestHandlerclass RequestHandler(SimpleXMLRPCRequestHandler): rpc_paths = ('/RPC2')server = SimpleXMLRPCServer(("localhost", 8000),requestHandler = RequestHandler)#server = SimpleXMLRPCServer(("localhost", 8000))server.register_introspection_functions()server.register_function(pow)def adder_function(x,y): return x+yserver.register_function(adder_function,'add')class MyFuncs: def div(self, x, y): return x//yserver.register_instance(MyFuncs())server.serve_forever()
Eg1客户端代码:
import xmlrpclibs = xmlrpclib.ServerProxy('http://localhost:8000')print s.pow(2,3)print s.add(2,3)print s.div(5,2)print s.system.listMethods()
XML_RPC服务端创建步骤:
1、 导入SimpleXMLRPCServer模块
2、 实例化一个XML-RPC服务对象,在指定的端口监听请求
server = SimpleXMLRPCServer((“localhost”, 8000))
3、 对函数的定义并把该函数注册到server端
server.register_function(adder_function,’add’)##adder_function是服务点定义的函数,add是客户端调用时用的函数。
server.register_introspection_functions()##如果用到内部函数,需要把内部函数注册到服务端。
server.register_instance(MyFuncs())##如果要注册的是一个类,可以利用这个函数把类中的方法全部注册到server端。
4、服务端开始监听运行server.serve_forever()
XML_RPC客户端创建步骤:
1、 导入xmlrpclib库模块
2、 创建一个代理到服务端
proxy = xmlrpclib.ServerProxy(‘http://localhost:8000‘)##函数参数是URL格式
3、通过代理就可以调用服务端的方法。
Eg2服务端代码:
import datetimefrom SimpleXMLRPCServer import SimpleXMLRPCServerimport xmlrpclibdef today(): today = datetime.datetime.today() return xmlrpclib.DateTime(today)def add(x,y): return x+ydef subtract(x,y): return x-ydef multiply(x,y): return x*ydef divide(x,y): return x/yserver = SimpleXMLRPCServer(("localhost", 8001))print "Listening on port 8001..."server.register_multicall_functions()server.register_function(today, "today")server.register_function(add, "add")server.register_function(subtract, "subtract")server.register_function(multiply, "multiply")server.register_function(divide, "divide")server.serve_forever()
注意:
server.register_multicall_functions()##这个函数的作用是可以使客户端同时调用服务端的的多个函数。
Eg2客户端代码:
import xmlrpclibimport datetimeproxy = xmlrpclib.ServerProxy("http://localhost:8001/")print proxy.add(7,3)print proxy.subtract(7,3)print proxy.multiply(7,3)print proxy.divide(7,3)today = proxy.today()multicall = xmlrpclib.MultiCall(proxy)multicall.today()multicall.add(7,3)multicall.subtract(7,3)multicall.multiply(7,3)multicall.divide(7,3)result = multicall()# convert the ISO8601 string to a datetime objectconverted = datetime.datetime.strptime(today.value, "%Y%m%dT%H:%M:%S")print "Today: %s" % converted.strftime("%d.%m.%Y, %H:%M")print "Today1: %s, 7+3=%d, 7-3=%d, 7*3=%d, 7/3=%d" % tuple(result)
注意:
multicall = xmlrpclib.MultiCall(proxy)
……
result = multicall()##将这两个函数之间的返回值写入到result中。
- Python中关于XML-RPC原理
- Python RPC 之 xml-rpc
- Python XML-RPC
- Python中的 XML-RPC
- Python XML-RPC入门
- 关于XML-RPC
- Zope中使用XML-RPC
- opennebula源码分析 -- XML-RPC 原理分析
- 尝试Python的XML-RPC远程调用
- python 多线程 XML RPC的实现
- python多线程XML-RPC的实现
- python类库31[XML RPC实例]
- 关于rpc简介、原理、实例-缘于difx
- php5中XML-RPC函数的使用
- php5中XML-RPC函数的使用
- OSGi环境中部署XML-RPC Server
- PHP中XML-RPC使用笔记
- The Python web services developer: XML-RPC for Python
- Linux 基础之——命令分类及优先级(CentOS7)
- 欢迎使用CSDN-markdown编辑器
- JBOSSWEB System.getProperties();
- python opencv绘制多边形和多边形填充
- golang 如何将多路复异步io转变成阻塞io的
- Python中关于XML-RPC原理
- Navicat Premium 出现的Missing required libary sqlite.dll,998
- Filter中的sendRedirect重定向
- 最后的作业:STINGY SAT问题
- hdu-3790
- Android-studio&Kotlin
- 20170715工作记账流水
- JS判断客户端类型(含微信)
- 【1-23】编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。再c语言中,注释不允许嵌套。