程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python XML-RPC實現簡單的遠程調用過程

編輯:Python

0 前言


RPC 是 Remote Procedure Call 的縮寫,翻譯成中文為:遠程方法調用。
在 Python 中,我們可以使用 XML-RPC 協議創建自己的跨平台,獨立於語言的服務器。XML Remote Procedure Call,即 XML 遠程方法調用。
XML-RPC 發表於1998年,它是一套允許運行在不同操作系統、不同環境的程序實現基於 Internet 過程調用的規范和一系列的實現。這種遠程過程調用使用 http 作為傳輸協議,XML 作為傳送信息的編碼格式。
XML-RPC 的定義盡可能的保持了簡單,但同時能夠傳送、處理、返回復雜的數據結構。XML- RPC(http://www.xmlrpc.com)是由 UserLand Software(UserLand Software)的 Dave Winer 及 Microsoft 共同發表[2]。後來在新的功能不斷被引入下,這個標准慢慢演變成為今日的 SOAP 協定。
XML-RPC 是一種遠程過程調用方法,它使用通過 HTTP 傳遞的 XML 作為載體。 有了它,客戶端可以在遠程服務器上調用帶參數的方法(服務器以 URI 命名)並獲取結構化的數據。
簡單的理解是:將數據定義為 XML 格式,通過 HTTP 協議進行遠程傳輸。

1 服務器

在 Python 中,xmlrpc 模塊是一個集合了 XML-RPC 服務端與客戶端實現模塊的包。 這些模塊是:
  • xmlrpc.client
  • xmlrpc.server

我們使用 SimpleXMLRPCServer 來創建 SimpleXMLRPCSERVER 實例,並告訴它以偵聽傳入請求。接下來,我們將某些功能定義為服務的一部分並注冊這些功能,以便服務器知道如何調用它。
創建一個 xmlrpc_server.py 文件。下面的示例中,我們使用 SimpleXMLRPCServer 實例創建服務器,並注冊一些預定義和自定義功能。最後,我們將服務器放入無限的循環接收和響應請求中。 
from xmlrpc.server import SimpleXMLRPCServer
from xmlrpc.server import SimpleXMLRPCRequestHandler


class RequestHandler(SimpleXMLRPCRequestHandler):

 rpc_paths = ('/RPC2',)


with SimpleXMLRPCServer(('localhost', 9000), requestHandler=RequestHandler) as server:
 
 server.register_introspection_functions()
 # Register len() function;
 server.register_function(len)

 # Register a function under a different name
 @server.register_function(name='rmndr')
 def remainder_function(x, y):
 return x // y

 # Register a function under function.__name__.
 @server.register_function
 def modl(x, y):
 return x % y
 server.serve_forever()

XML-RPC 可以讓我們很容易的構造一個簡單的遠程調用服務。你所需要做的僅僅是創建一個服務器實例, 通過它的方法 register_function() 來注冊函數,然後使用方法 serve_forever() 啟動它。
一旦啟動了上述服務器,就可以通過客戶端程序來調用,該程序可以參考函數並進行函數調用。

2 運行客戶端

創建一個 xmlrpc_client.py 文件:import xmlrpc.client

s = xmlrpc.client.ServerProxy('http://localhost:9000')

print(s.len("Yuzhou1su"))
print(s.rmndr(1024,128))
print(s.modl(7,3))

# Print list of available methods
print(s.system.listMethods())

在終端中能看到如下輸出$ python xmlrpc_client.py 
9
8
1
['len', 'modl', 'rmndr', 'system.listMethods', 'system.methodHelp', 'system.methodSignature']
  • 第一個結果:字符串 Yuzhou1su 長度為 9
  • 第二個結果:1024 除以 128 的整除結果為 8
  • 第三個結果:7 除以 3 的余數為 1
  • 最後一行:輸出系統方法

總結


XML-RPC 的缺點:
  • 它的性能不高
  • 不支持其他數據格式的傳輸。以及 XML-RPC 會將所有的數據序列化為 XML 格式,因此就會比其他的方法要慢一些
  • 而且其不能安全防范惡意構建的數據。

XML-RPC 的優點:
  • 傳輸復雜的數據。
  • 通過程序語言的封裝,實現遠程對象的調用。

但是,這種簡單的編碼的優勢在於許多其他的編程語言都能夠理解。使用XML-RPC 的話,客戶端程序就可以采用 Python 之外的語言來編寫,同樣可以訪問你的服務。
拋開 XML-RPC 的局限性不說,如果需要以快速但並不完善(quick and dirty)的方式實現一個遠端過程調用系統,那麼了解一下 XML-RPC 還是很值得的。很多時候簡單的方案就已經足夠好了。另外,JSON-RPC 的原理與其類似。
  • xmlrpc --- XMLRPC 服務端與客戶端模塊
  • 通過XML-RPC實現簡單的遠程調用
  • xmlrpc.client — XML-RPC 客戶端類庫


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved