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()

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

  • 相关阅读:
    图像分割之Dense Prediction with Attentive Feature Aggregation
    与中文对齐的英文等宽字体
    管家订菜与Scrum流程
    说说自己在2014年的阅读思路
    Hello World
    Bootstrap实现轮播
    普通Apache的安装与卸载
    Python中OS模块
    Python中文件读写
    Python装饰器
  • 原文地址:https://www.cnblogs.com/lxt287994374/p/3904219.html
Copyright © 2011-2022 走看看