1. 程式人生 > >Python中使用XMLRPC(入門)

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

 此時,伺服器就支援多執行緒併發了。