服务端的实现:
import SimpleXMLRPCServer,os running=True funs=['add','minus','exit','getCurrentList','linuxCmd']
#new code解决rpc调用速度慢 #每次返回的时候BaseHTTPRequestHandler 都会调用log_message 方法记录一些日志信息,而log_message方法需要知道请求的host 。 # 问题就出在这里,当没有host的时候程序会调用_socket 的gethostname()方法,而服务器上并没有配置驿应的host。 import BaseHTTPServer def not_insane_address_string(self): host, port = self.client_address[:2] return '%s (no getfqdn)' % host #used to call: socket.getfqdn(host) BaseHTTPServer.BaseHTTPRequestHandler.address_string =\ not_insane_address_string
#end new code class ExposeFuns(object): def add(self,a,b): return a+b def minus(self,a,b): return a-b def exit(self): global running running=False return 'exit!' def getCurrentList(self): return os.getcwd() def listDir(self,dir): return os.listdir(dir) def linuxCmd(self,dir): return os.popen(dir).read() def useage(self): return funs; server= SimpleXMLRPCServer. SimpleXMLRPCServer(('localhost',8000)) server.register_instance(ExposeFuns()) #server.register_function(add) while running: server.handle_request()
客户端的实现:
import xmlrpclib server=xmlrpclib.Server('http://127.0.0.1:8000') print server.add(5,88) print server.minus(server.add(5,88),5) print server.finis()