一 远程过程调用RPC
XML-RPC is a Remote Procedure Call method that uses XML passed via HTTP as a transport. With it, a client can call methods with parameters on a remote server (the server is named by a URI) and get back structured data. This module supports writing XML-RPC client code; it handles all the details of translating between conformable Python objects and XML on the wire.
简单地,client可以调用server上提供的方法,然后得到执行的结果。类似与webservice。
推荐查看xmlprc的源文件:C:\Python31\Lib\xmlrpc
二 实例
1) Server
from
xmlrpc.server
import
SimpleXMLRPCServer
from
xmlrpc.server
import
SimpleXMLRPCRequestHandler
def
div(x,y):
return
x
-
y
class
Math:
def
_listMethods(self):
#
this method must be present for system.listMethods
#
to work
return
[
'
add
'
,
'
pow
'
]
def
_methodHelp(self, method):
#
this method must be present for system.methodHelp
#
to work
if
method
==
'
add
'
:
return
"
add(2,3) => 5
"
elif
method
==
'
pow
'
:
return
"
pow(x, y[, z]) => number
"
else
:
#
By convention, return empty
#
string if no help is available
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
))
server.register_introspection_functions()
server.register_function(div,
"
div
"
)
server.register_function(
lambda
x,y: x
*
y,
'
multiply
'
)
server.register_instance(Math())
server.serve_forever()
2)client
import
xmlrpc.client
s
=
xmlrpc.client.ServerProxy(
'
http://localhost:8000
'
)
print
(s.system.listMethods())
print
(s.pow(
2
,
3
))
#
Returns 28
print
(s.add(
2
,
3
))
#
Returns 5
print
(s.div(
3
,
2
))
#
Returns 1
print
(s.multiply(
4
,
5
))
#
Returns 20
3)result
完!