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

2、试验结果如下:

3、源码如下:

服务器端的源代码如下:

  1. import operator, math
  2. from SimpleXMLRPCServer import SimpleXMLRPCServer
  3. from functools import reduce
  4.  
  5. def main():
  6. server = SimpleXMLRPCServer(('127.0.0.1', 7001))
  7. server.register_introspection_functions()
  8. server.register_multicall_functions()
  9. server.register_function(addtogether)
  10. server.register_function(quadratic)
  11. server.register_function(remote_repr)
  12.  
  13. print("Server ready")
  14. server.serve_forever()
  15.  
  16. def addtogether(*things):
  17. """Add together everything in the list things ."""
  18. return reduce(operator.add, things)
  19.  
  20. def quadratic(a, b, c):
  21. """Determine x values satisfying: a * x * x + b * x + c = 0"""
  22. b24ac = math.sqrt(b*b - 4.0*a*c)
  23. return list(set([(-b-b24ac) / 2.0*a, (-b+b24ac) / 2.0*a]))
  24.  
  25. def remote_repr(arg):
  26. """return the repr() rendering of the supplied arg """
  27. return arg
  28.  
  29. if __name__ == '__main__':
  30. main()

客户端的代码如下:

  1. import xmlrpclib
  2.  
  3. def main():
  4. proxy = xmlrpclib.ServerProxy('http://127.0.0.1:7001')
  5.  
  6. print("Here are the functions supported by this server:")
  7.  
  8. print("next calculator addtogether: ")
  9. print(proxy.addtogether('x','y','z'))
  10. print(proxy.addtogether('x','y','z'))
  11.  
  12. print(proxy.addtogether('x','y','z'))
  13. print(proxy.addtogether('x','y','z'))
  14. for method_name in proxy.system.listMethods():
  15. if method_name.startswith('system.'):
  16. continue
  17.  
  18. signatures = proxy.system.methodSignature(method_name)
  19. if isinstance(signatures, list) and signatures:
  20. for signature in signatures:
  21. print('%s(%s)' %(method_name, signature))
  22.  
  23. else:
  24. print('%s(...)' %(method_name,))
  25.  
  26. method_help = proxy.system.methodHelp(method_name)
  27. #if method_help:
  28. # print(' ', methodHelp)
  29.  
  30. print(proxy.addtogether('x','y','z'))
  31. print("addtogether result ")
  32.  
  33. if __name__ == '__main__':
  34. main()

举例:使用XML库的方式,实现RPC通信的更多相关文章

  1. 浅谈 Java Xml 底层解析方式

    XML 使用DTD(document type definition)文档类型来标记数据和定义数据,格式统一且跨平台和语言,已成为业界公认的标准. 目前 XML 描述数据龙头老大的地位渐渐受到 Jso ...

  2. 做参数可以读取参数 保存参数 用xml文件的方式

    做参数可以读取参数 保存参数 用xml文件的方式 好处:供不同用户保存适合自己使用的参数

  3. Spring中加载ApplicationContext.xml文件的方式

    Spring中加载ApplicationContext.xml文件的方式 原文:http://blog.csdn.net/snowjlz/article/details/8158560 1.利用Cla ...

  4. Spring中Bean的配置:基于XML文件的方式

    Bean的配置一共有两种方式:一种是基于XML文件的方式,另一种是基于注解的方式.本文主要介绍基于XML文件的方式 <bean id="helloWorld" class=& ...

  5. XML的解析方式(DOM、SAX、StAX)

    (新)  XML的解析方式(DOM.SAX.StAX) 博客分类: XML   一般来说,解析XML文件存在着两种方式,一种是event-based API,比如说象SAX,XNI. 第二种是tree ...

  6. java解析XML几种方式

    第一种:DOM. DOM的全称是Document Object Model,也即文档对象模型.在应用程序中,基于DOM的XML分析器将一个XML文档转换成一个对象模型的集合(通常称DOM树),应用程序 ...

  7. Spring声明式事务(xml配置事务方式)

    Spring声明式事务(xml配置事务方式) >>>>>>>>>>>>>>>>>>>& ...

  8. XML数据读取方式性能比较(一)

    原文:XML数据读取方式性能比较(一) 几个月来,疑被SOA,一直在和XML操作打交道,SQL差不多又忘光了.现在已经知道,至少有四种常用人XML数据操作方式(好像Java差不多),不过还没有实际比较 ...

  9. Android] Android XML解析学习——方式比较

     [Android] Android XML解析学习——方式比较 (ZT)  分类: 嵌入式 (From:http://blog.csdn.net/ichliebephone/article/deta ...

随机推荐

  1. cocos2dx lua中异步加载网络图片,可用于显示微信头像

    最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...

  2. RMA退货流程解决方案

    RMA退货流程解决方案 1.概述 在高科技制造业中有效地对产品退货进行控制和跟踪有很大的意义.对于一个产品成本从几元到几十万元的工业,管理退货流程的能力至关重要,缺乏跟踪和控制有可能导致上百万元的损失 ...

  3. GUI(国际象棋棋盘)

    package com.niit.javagui; import java.awt.BorderLayout; import java.awt.Color; import java.awt.GridB ...

  4. 线程高级篇-Lock锁和Condition条件

    浅谈Synchronized: synchronized是Java的一个关键字,也就是Java语言内置的特性,如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,执行代码块时,其 ...

  5. 201521123050 《Java程序设计》第8周学习总结

    1. 本周学习总结 2. 书面作业 1.List中指定元素的删除(题目4-1) 1.1 实验总结 在删除元素时,要注意后续元素位置的前移 2.统计文字中的单词数量并按出现次数排序(题目5-3) 2.1 ...

  6. 201521123112《Java程序设计》第1周学习总结

    1.本周学习总结 本周通过面授课和上机课,以及在课后通过对<Java学习笔记>前一二章的阅读,初步了解了Java在计算机领域中的重要性,以及Java为什么能够这么广泛的运用在编程中.通过上 ...

  7. 201521123024 《Java程序设计》第13周学习总结

    1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容.

  8. 编程从入门到提高,然后放弃再跑路(Java)

    1.Java入门篇 1.1 基础入门和面向对象 1.1.1 编程基础 [01] Java语言的基本认识 [02] 类和对象 [03] 类的结构和创建对象 [04] 包和访问权限修饰符 [05] 利用p ...

  9. (转)Unity3D中移动物体位置的几种方法

    1. 简介 在unity3d中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position. 2. 通过Transform组件移动物体 Transform 组件用于描述物体在 ...

  10. 微信开发(2)–获取access_token

    一.access_token access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.access_token的存储至少要保 ...