Python的招牌菜xmlrpc
一、简单介绍
为了解决在系统的80port提供RPC的服务。而又不影响正在运行的WEB服务。人们想出了用HTTP协议传输RPC包的办法。对于差点儿是专门用于传输文本的HTTP协议。要在其上传输RPC封包。最方便的方法莫过于把RPC封包编码成文本形式——比如XML文件。
XML- RPC(http://www.xml-rpc.com)是由美国UserLand公司指定的一个RPC协议。它将RPC信息封包编码为XML,然后通过 HTTP传输封包;
简单的理解:
将数据定义为xml格式。通过http协议进行远程传输。
二、优点
1. 传输复杂的数据。
2. 通过程序语言的封装,实现远程对象的调用。
三、Python中xmlrpc应用
server端:
from SimpleXMLRPCServer import *
#import SimpleXMLRPCRequestHandler def div(x,y):
return x -y class Math:
def _listMethods(self):
return ['add','pow'] def _methodHelp(self,method):
if method == 'add':
return "add(2,3) =>5"
elif method == 'pow':
return "pow(x,y[,z])=>number"
else:
return "" def _dispatch(self,method,params):
if method == 'pow':
return pow(*params)
elif method == 'add':
return params[0] + params[1]
else:
raise 'bad method' server = SimpleXMLRPCServer(("localhost",8000))
# register_introspection_functions:Registers the XML-RPC introspection methods in the system namespace
server.register_introspection_functions()
server.register_function(div,"div")
server.register_function(lambda x,y:x*y,'multiply')
server.register_instance(Math())
#serve_forever:Handle one request at a time until shutdown.
#Polls for shutdown every poll_interval seconds. Ignores
#self.timeout. If you need to do periodic tasks, do them in
#another thread.
server.serve_forever()
client:
import xmlrpclib
s = xmlrpclib.ServerProxy('http://localhost:8000')
print(s.system.listMethods()) print(s.pow(2,3))
print(s.add(2,3))
print(s.div(3,2))
print(s.multiply(4,5))
执行情况:
[maokx@maokexu1 xmlrpc]$ python server.py /usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:37] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:37] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:37] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:37] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:37] "POST /RPC2 HTTP/1.0" 200 - /usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:45] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:45] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:45] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:45] "POST /RPC2 HTTP/1.0" 200 -
/usr/lib64/python2.6/rfc822.py, readheaders, 131, enter readheaders
/usr/lib64/python2.6/rfc822.py, readheaders, 205, exit readheaders
localhost.localdomain - - [16/Nov/2014 23:25:45] "POST /RPC2 HTTP/1.0" 200 - [maokx@maokexu1 xmlrpc]$ python client.py
['add', 'div', 'multiply', 'pow', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
8
5
1
20
[maokx@maokexu1 xmlrpc]$ python client.py
['add', 'div', 'multiply', 'pow', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
8
5
1
20
[maokx@maokexu1 xmlrpc]$
Python的招牌菜xmlrpc的更多相关文章
- Python与PHP通过XMLRPC进行通信
Python与PHP通过XMLRPC进行通信:服务器端用Python,客户端用PHP. 服务器端:xmlrpc_server.py #!/usr/bin/python # coding: UTF-8 ...
- The Python web services developer: XML-RPC for Python
原文地址:http://www.ibm.com/developerworks/webservices/library/ws-pyth10/index.html 摘要:概括地说,您可以将 XML-RPC ...
- linux 下 rpc python 实例之使用XML-RPC进行远程文件共享
这是个不错的练习,使用python开发P2P程序,或许通过这个我们可以自己搞出来一个P2P下载工具,类似于迅雷.XML-RPC是一个远程过程调用(remote procedure call,RPC)的 ...
- Python 手册——开胃菜
如果你写过大规模的Shell脚本,应该会有过这样的体会:你还非常想再加一些别的功能进去,但它已经太大. 太慢.太复杂了:或者这个功能需要调用一个系统函数,或者它只适合通过C来调用……通常这些问题还不足 ...
- Python框架、库以及软件资源汇总
转自:http://developer.51cto.com/art/201507/483510.htm 很多来自世界各地的程序员不求回报的写代码为别人造轮子.贡献代码.开发框架.开放源代码使得分散在世 ...
- Awesome Python
Awesome Python A curated list of awesome Python frameworks, libraries, software and resources. Insp ...
- Machine and Deep Learning with Python
Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...
- 自学python笔记(一)
一 简介:Python是著名的"龟叔"Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言.其他的就不说了..... python是 ...
- 零基础学习python(2)
再讲新知识之前,先将一些之前没提的东西再介绍一下: (1) 命令行模式 在Windows开始菜单选择“命令提示符”(或者是在搜索栏中输入“cmd”),就进入到命令行模式,它的提示符类似C:\>: ...
随机推荐
- 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦 我们项目组一值使用 ...
- 能自学成为WEB前端工程师吗?
自学是大家学习一门it技术的时候,都会首先考虑的一种学习方式,web前端开发学习也是一样,但是自学web前端也是让大家充满疑问的一种学习方 自学是大家学习一门it技术的时候,都会首先考虑的一种学习方式 ...
- Oracle 存储过程的导出导入序列的导出
昨天发布网站,需要将oracle的存储过程导出来,再在新的电脑加上去.登陆—>工具—>导出用户对象—>选取需要导出的存储过程—>导出 保存格式为.sql.当然利用该种方法也可以 ...
- 使用.net core在Ubuntu构建一个TCP服务器
介绍和背景 TCP编程是网络编程领域最有趣的部分之一.在Ubuntu环境中,我喜欢使用.NET Core进行TCP编程,并使用本机Ubuntu脚本与TCP服务器进行通信.以前,我在.NET框架本身写了 ...
- java equals 和 == 的区别
)1. == 可以用来比较基本类型以及引用类型.在基本类型中 == 比较的是两个变量的值是否相等.在引用类型中,== 比较的是两个对象的内存地址是否相等. )2. equals 只能用来比较引用类型. ...
- PHP启动:动态库加载失败(PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/*.so')
今天在linux上面智障一般搞了好久,本来想安装个swoole的,然后用 php -m 的命令想看下安装的PHP扩展库,发现有的扩展库有的可以出来,有的加载失败, 加载失败的错误类型: PHP Wa ...
- ASP.NET没有魔法——ASP.NET Identity 的“多重”身份验证
ASP.NET Identity除了提供基于Cookie的身份验证外,还提供了一些高级功能,如多次输入错误账户信息后会锁定用户禁止登录.集成第三方验证.账户的二次验证等,并且ASP.NET MVC的默 ...
- scala时间处理
1.获取当前时间的年份.月份.天.小时等等 val nowDay=LocalDate.now().getDayOfMonth val nowDay=LocalTime.now().getHour 2. ...
- 校验ISBN的方法
国际标准书号(International Standard Book Number,ISBN:是国际通用的图书或独立的出版物(除定期出版的期刊)代码.出版社可以通过国际标准书号清晰的辨认所有非期刊书 ...
- Foundation基础框架
自己总结的 // // main.m // 01-结构体 // // Created by Mac-ZhangXiaoMeng on 14/12/29. // Copyright (c) 2014年 ...