RPC是Remote Procedure Call的縮寫,翻譯成中文爲:遠程方法調用。html
它是一種在本地機器上調用遠端機器上的一個過程(方法)的技術,這個過程也被你們稱爲「分佈式計算」,是爲了提升各個分立機器的「互操做性」而發明出來的技術。python
XML-RPC的全稱是XML Remote Procedure Call,即XML遠程方法調用。安全
它是一套容許運行在不一樣操做系統、不一樣環境的程序實現基於Internet過程調用的規範和一系列的實現。這種遠程過程調用使用http做爲傳輸協議,XML做爲傳送信息的編碼格式。Xml-Rpc的定義儘量的保持了簡單,但同時可以傳送、處理、返回複雜的數據結構。XML- RPC(http://www.xmlrpc.com)是由美國UserLand公司指定的一個RPC協議。簡單的理解是:將數據定義爲xml格式,經過http協議進行遠程傳輸。服務器
1. 傳輸複雜的數據。數據結構
2. 經過程序語言的封裝,實現遠程對象的調用。多線程
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()
此時,服務器就支持多線程併發了。