python模块学习-XMLRPC

转载来源:http://python.u85.us/viewnews-197.html
编写客户端提交数据到服务器处理是程序员最常碰到的几个问题之一。各种不同的语言对此都有相应的解决方案。比如Unix下,C程序员们可以用 SUNRPC,Java程序员则使用RMI来处理。大多数语言还都可以使用Web Service或者ICE。它们的使用方法类似,编写一个接口定义文件,用一个工具处理并生成代码,加入到工程中,最后编译生成目标文件运行。有用过这类 工具的朋友们,脑子里应该都会闪出一个字——烦!真的是谁用谁知道。

Python同样也提供了一个基于XMLRPC的解决方案,不过用法很简单:

首先,就好像在编写普通的程序那样子编写服务器。

接着使用SimpleXMLRPCServer模块运行XMLRPC服务器,在其中注册服务器提供的函数或者对象。

最后,在客户端内使用xmlrpclib.ServerProxy连接到服务器,想要调用服务器的函数,直接调用ServerProxy即可。

一个最简单的hello,word示例:

#helloserver.py

from SimpleXMLRPCServer import SimpleXMLRPCServer
def hello():
    print "hello,world!"
    svr=SimpleXMLRPCServer(("", 8080), allow_none=True)
    svr.register_function(hello)
    svr.serve_forever()

#helloclient.py

from xmlrpclib import ServerProxy
svr=ServerProxy("http://localhost:8080")
svr.hello()

先后运行helloserver.py和 helloclient.py就可以看到控制台输出hello,world

不过,美中不足的 是,SimpleXMLRPCServer是一个单线程的服务器。这意味着,如果几个客户端同时发出多个请求,其它的请求就必须等待第一个请求完成以后才 能继续。这里有个技巧解决这个问题:

 

from SimpleXMLRPCServer import SimpleXMLRPCServer 

from SocketServer import ThreadingMixIn 

class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass

现在把helloserver改一改:

svr=ThreadXMLRPCServer(("", 8080), allow_none=True)

现在服务器就支持多线程并发了。

 

XMLRPC一个标准协议,定义了如何使用HTTP和 XML来传递多种类型数据。

posted @ 2016-03-30 22:59  yexihu  阅读(224)  评论(0)    收藏  举报