python實現rpc遠端呼叫
阿新 • • 發佈:2019-02-15
遠端呼叫就是將物件名、函式名、引數等傳遞給遠端伺服器,伺服器將處理結果返回給客戶端。
遠端呼叫使得呼叫遠端伺服器的物件、方法的方式就和呼叫本地物件、方法的方式差不多,因為我們通過網路程式設計把這些都隱藏起來了。遠端呼叫是分散式系統的基礎。
遠端呼叫一般分為兩種,遠端過程呼叫(RPC)和遠端方法呼叫(RMI),這裡,我們介紹RPC遠端過程呼叫。
service.py程式碼如下:
s是一個綁定了本地8080埠的伺服器物件,register_function()方法將函式add註冊到s中。serve_forever()啟動伺服器。from SimpleXMLRPCServer import SimpleXMLRPCServer def add(x, y): return x + y if __name__ == '__main__': s = SimpleXMLRPCServer(('127.0.0.1', 8080)) s.register_function(add) s.serve_forever()
client.py程式碼如下:
from xmlrpclib import ServerProxy
if __name__ == '__main__':
s = ServerProxy("http://127.0.0.1:8080")
print s.add(3,4)
現在,執行server.py,然後執行client.py,client.py所在的console會輸出7。
我們用wireshark看一下這期間傳遞的資料是什麼樣子的,請求的資料:
<?xml version='1.0' ?> <methodCall> <methodName> add </methodName> <params> <param> <value> <int> 3 </int> </value> </param> <param> <value> <int> 4 </int> </value> </param> </params> </methodCall>
響應的資料:
<?xml version='1.0' ?>
<methodResponse>
<params>
<param>
<value>
<int> 7 </int>
</value>
</param>
</params>
</methodResponse>