RPC: 使用xml-xpc实现进程间的rpc调用试验和结论

来源:互联网 发布:甜甜圈拷机软件 编辑:程序博客网 时间:2024/04/28 03:54

1、先说结论:使用xml-rpc的机制可以很方便的实现服务器间的RPC调用。


2、试验结果如下:


3、源码如下:

服务器端源码如下:

import operator, mathfrom SimpleXMLRPCServer import SimpleXMLRPCServerfrom functools import reducedef main():server = SimpleXMLRPCServer(('127.0.0.1', 7001))server.register_introspection_functions()server.register_multicall_functions()server.register_function(addtogether)server.register_function(quadratic)server.register_function(remote_repr)print("Server ready")server.serve_forever()def addtogether(*things):"""Add together everything in the list things ."""return reduce(operator.add, things)def quadratic(a, b, c):"""Determine x values satisfying: a * x * x + b * x + c = 0"""b24ac = math.sqrt(b*b - 4.0*a*c)return list(set([(-b-b24ac) / 2.0*a, (-b+b24ac) / 2.0*a]))def remote_repr(arg):"""return the repr() rendering of the supplied arg """return argif __name__ == '__main__':main()

客户端的代码如下:

import xmlrpclibdef main():proxy = xmlrpclib.ServerProxy('http://127.0.0.1:7001')print("Here are the functions supported by this server:")print("next calculator addtogether: ")print(proxy.addtogether('x','y','z'))print(proxy.addtogether('x','y','z'))print(proxy.addtogether('x','y','z'))print(proxy.addtogether('x','y','z'))for method_name in proxy.system.listMethods():if method_name.startswith('system.'):continuesignatures = proxy.system.methodSignature(method_name)if isinstance(signatures, list) and signatures:for signature in signatures:print('%s(%s)' %(method_name, signature))else:print('%s(...)' %(method_name,))method_help = proxy.system.methodHelp(method_name)#if method_help:#print(' ', methodHelp)print(proxy.addtogether('x','y','z'))print("addtogether result ")if __name__ == '__main__':main()


原创粉丝点击