注册并发布一个xmlrpc远程对象(函数、类对象、客户端使用调用(对象.方法)格式)
2012-09-14 11:24
731 查看
前言:SimpleXMLRPCServer顾名思义就是实现XML-RPC的远程调用服务器
服务器端:
客户端:
服务器端:
from SimpleXMLRPCServer import SimpleXMLRPCServer #服务器端 import logging import os logging.basicConfig(level=logging.DEBUG) #记录日志级别为DEBUG server = SimpleXMLRPCServer(('localhost', 9000), logRequests=True) #绑定到9000端口 假如指定allow_none=True,接受返回值是none def list_contents(dir_name): #一个响应操作方法 logging.debug('list_contents(%s)', dir_name) #记录日志 return os.listdir(dir_name) #给客户端返回结果,这个例子返回当前目录的所有文件名 def my_function(a, b): #这个响应方法含有参数 return a * b class DirectoryService: #一个响应类 def list(self, dir_name): return os.listdir(dir_name) class ServiceRoot: #添加一个空类 pass class DirectoryService: #这个类是定义响应方法的类 def list(self, dir_name): return os.listdir(dir_name) root = ServiceRoot() root.dir = DirectoryService() #就是为了在使用ServiceRoot.dir的时候找到DirectoryService() server.register_function(list_contents,'dir') #在服务器注册这个方法 会表示把这个方法重定义成'dir',客户端使用proxy.dir而不是proxy.list_contents server.register_function(os.mkdir, 'dir.create') #注册的方法别名也支持'.',这里这个方法是proxy.dir.create server.register_function(my_function, 'multiply args') #这个在调用时是getattr(proxy, 'multiply args')(5, 5) 使用getattr是因为这个注册的方法名字'multiply args'含有空格 server.register_instance(DirectoryService()) #用类的方法注册 只在在客户端使用proxy.list (list是这个类中定义的方法) server.register_instance(root, allow_dotted_names=True) #指定容许类中的'.' 这样调用:proxy.dir.list try: print 'Use Control-C to exit' server.serve_forever() #loop运行 except KeyboardInterrupt: print 'Exiting'
客户端:
import xmlrpclib #客户端 proxy = xmlrpclib.ServerProxy('http://localhost:9000') print proxy.list_contents('/tmp') #使用上面注册的这个方法找到'/tmp'下的所有文件名 print proxy.dir.list("xx") # 调用某个对象里的函数
相关文章推荐
- eclipse 中main()函数中的String[] args如何使用?通过String[] args验证账号密码的登录类?静态的主方法怎样才能调用非static的方法——通过生成对象?在类中制作一个方法——能够修改对象的属性值?
- 一个关于WCF调用远程链接返回405错误不允许使用此方法的问题
- Javascript中调用一个函数(对象),使用new或者直接调用有什么区别?
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
- CXF之使用工厂方法(java代码)发布服务与进行客户端调用
- ios 中调用函数的方法是消息传递,这个和普通的函数调用的区别是,你可以随时对一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以Objective-C可以在runtime的时候
- 当使用System,out.println()打印一个对象是自动调用toString方法
- 使用sqlite3(数据库知识)的接口函数完成一个用户注册功能模块设计 要封装成函数,在独立的main中调用测试
- 使用java调用C语言的方法,让java获取串口数据并生成一个String对象的代码。
- 前台使用ajax 调用action方法,返回一个对象List集合的json
- call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.
- 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了;面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为(转)
- 使用Spring Cloud Feign作为HTTP客户端调用远程HTTP服务的方法(推荐)
- 《Java程序》使用递归调用的方法,写一个能够将字符串倒叙输出的函数
- 私有方法是封闭的?使用反射来调用一个对象的私有方法。
- call 方法在使用一个指定的this值和若干个指定的参数值的前提下调用某个函数或方法.
- struts2如何动态调用action的方法以及使用json插件范围json格式的javascript对象
- 使用MVC中的HtmlHelper对象的ActionLink方法,实现一个Javascript:void(0)效果,去调用一个JS方法
- js一个典型的对象写法,推荐使用这种格式,用于处理图像的基本方法、
- artTemplate--使用artTemplate时,由于json对象属性有数字命名格式 导致调用报错 syntax error