zoukankan      html  css  js  c++  java
  • Python中使用XMLRPC(入门)

    一、简介

      RPC是Remote Procedure Call的缩写,翻译成中文为:远程方法调用。

    它是一种在本地机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算”,是为了提高各个分立机器的“互操作性”而发明出来的技术。

      XML-RPC的全称是XML Remote Procedure Call,即XML远程方法调用。

    它是一套允许运行在不同操作系统、不同环境的程序实现基于Internet过程调用的规范和一系列的实现。这种远程过程调用使用http作为传输协议,XML作为传送信息的编码格式。Xml-Rpc的定义尽可能的保持了简单,但同时能够传送、处理、返回复杂的数据结构。XML- RPC(http://www.xmlrpc.com)是由美国UserLand公司指定的一个RPC协议。简单的理解是:将数据定义为xml格式,通过http协议进行远程传输。

    二、优点

    1. 传输复杂的数据。

    2. 通过程序语言的封装,实现远程对象的调用。


    三、Python下的XML-RPC

    1. 类库:SimpleXMLRPCServer

      一般使用在服务器端,这个模块用来构造一个最基本的XML-RPC服务器框架。

    2. 类库:xmlrpclib

      一般使用在客户端,这个模块用来调用注册在XML-RPC服务器端的函数,xmlrpclib并不是一个类型安全的模块,无法抵御恶意构造的数据,这方面的一些处理工作需要交给开发者自己。

    大致用法:使用SimpleXMLRPCServer模块运行XMLRPC服务器,在其中注册服务器提供的函数或者对象;然后在客户端内使用xmlrpclib.ServerProxy连接到服务器,想要调用服务器的函数,直接调用ServerProxy即可。

    简单实例:hello xmlprc

    服务器端:xmlrpc_server.py

    import SimpleXMLRPCServer
    
    class MyObject:
        def sayHello(self):
            return "hello xmlprc"
    
    obj = MyObject()
    server = SimpleXMLRPCServer.SimpleXMLRPCServer(("localhost", 8088))
    server.register_instance(obj)
    
    print "Listening on port 8088"
    server.serve_forever()

    客户端:xmlrpc_client.py

    import xmlrpclib
    
    server = xmlrpclib.ServerProxy("http://localhost:8088")
    
    words = server.sayHello()
    
    print "result:" + words

      打开一个终端,输入命令,运行服务器端程序:

    chmod u+x xmlrpc_server.py
    python xmlrpc_server.py

    打开另一个新的终端,输入命令,运行客户端程序:
    chmod u+x xmlrpc_client.py
    python xmlrpc_client.py

    可以看到客户端控制台上输出了:hello xmlprc。如图:




    附:
    SimpleXMLRPCServer是一个单线程的服务器。
    这意味着,如果几个客户端同时发出多个请求,其它的请求就必须等待第一个请求完成以后才能继续。
    若修改服务器端如下:
    from SimpleXMLRPCServer import SimpleXMLRPCServer
    from SocketServer import ThreadingMixIn
    class ThreadXMLRPCServer(ThreadingMixIn, SimpleXMLRPCServer):pass
    
    class MyObject:
        def sayHello(self):
            return "hello xmlprc"
    
    obj = MyObject()
    server = ThreadXMLRPCServer(("localhost", 8088), allow_none=True)
    server.register_instance(obj)
    
    print "Listening on port 8088"
    server.serve_forever()

     此时,服务器就支持多线程并发了。

  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3904219.html
Copyright © 2011-2022 走看看