Python中使用XMLRPC(入門)

1、簡介

  RPC是Remote Procedure Call的縮寫,翻譯成中文爲:遠程方法調用。python

它是一種在本地機器上調用遠端機器上的一個過程(方法)的技術,這個過程也被你們稱爲「分佈式計算」,是爲了提升各個分立機器的「互操做性」而發明出來的技術。安全

  XML-RPC的全稱是XML Remote Procedure Call,即XML遠程方法調用。服務器

它是一套容許運行在不一樣操做系統、不一樣環境的程序實現基於Internet過程調用的規範和一系列的實現。這種遠程過程調用使用http做爲傳輸協議,XML做爲傳送信息的編碼格式。Xml-Rpc的定義儘量的保持了簡單,但同時可以傳送、處理、返回複雜的數據結構。XML- RPC(http://www.xmlrpc.com)是由美國UserLand公司指定的一個RPC協議。簡單的理解是:將數據定義爲xml格式,經過http協議進行遠程傳輸。數據結構

 

2、優勢

1. 傳輸複雜的數據。
多線程

2. 經過程序語言的封裝,實現遠程對象的調用。併發


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

 此時,服務器就支持多線程併發了。

相關文章
相關標籤/搜索