1. 程式人生 > >python實現rpc遠端呼叫

python實現rpc遠端呼叫

    遠端呼叫就是將物件名、函式名、引數等傳遞給遠端伺服器,伺服器將處理結果返回給客戶端。

遠端呼叫使得呼叫遠端伺服器的物件、方法的方式就和呼叫本地物件、方法的方式差不多,因為我們通過網路程式設計把這些都隱藏起來了。遠端呼叫是分散式系統的基礎。

遠端呼叫一般分為兩種,遠端過程呼叫(RPC)和遠端方法呼叫(RMI),這裡,我們介紹RPC遠端過程呼叫。

service.py程式碼如下:

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()
s是一個綁定了本地8080埠的伺服器物件,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>