Python中實現遠程調用(RPC、RMI)簡單例子

來源:互聯網
上載者:User
遠程調用使得調用遠程伺服器的對象、方法的方式就和調用本機物件、方法的方式差不多,因為我們通過網路編程把這些都隱藏起來了。遠程調用是分布式系統的基礎。

遠程調用一般分為兩種,遠端程序呼叫(RPC)和遠程方法調用(RMI)。

RPC

RPC屬於函數層級的遠程調用,其多是通過HTTP傳輸資料,資料形式有XML、JSON、序列化資料等。在此,用python做一個xml-rpc的樣本。 先給伺服器端server.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看一下這期間傳遞的資料是什麼樣子的,請求的資料:
複製代碼 代碼如下:





add




3




4




響應的資料:
複製代碼 代碼如下:







7




好吧,言簡意賅,不做贅述。

RMI

RMI意為遠程方法調用,粒度比RPC要大,因為它的基本單位是對象。其大致思路是這樣的:建立RMI伺服器對象,將執行個體化的某個對象以指定的服務名稱(也可以是多個對象,但是服務名稱不應相同)註冊到RMI伺服器對象中,之後啟動RMI伺服器。伺服器等待用戶端發送的資料(包括服務名稱、函數名、參數),將處理結果返回給用戶端。 Pyro4是一個基於python的RMI實現,下面我們用Pyro4建立一個RMI伺服器,請看server2.py:
複製代碼 代碼如下:


import Pyro4
class GreetingMaker(object):
def get_fortune(self, name):
return "Hello, {0}. \n" .format(name)
greeting_maker=GreetingMaker()
daemon=Pyro4.Daemon()
uri=daemon.register(greeting_maker)
print "Ready. Object uri =", uri
daemon.requestLoop()
uri變數是Pyro4用自己的方法為greeting_maker對象產生的uri,其中包括通訊端以及為greeting_maker產生的唯一的id。這個id相當於服務名稱,當然也可以指定更易懂的服務名稱。下面是用戶端client2.py:

import Pyro4
uri=raw_input(" Pyro uri : ").strip()
name=raw_input("Your name: ").strip()
greeting_maker=Pyro4.Proxy(uri)
print greeting_maker.get_fortune(name)


這其中要輸入的uri也就是server2.py產生的uri。通過給Pyro4.Proxy傳遞greeting_maker的uri,可以認為和伺服器端的greeting_maker建立的串連,然後調用greeting_maker的get_fortune()方法。如果name是letian,那麼print greeting_maker.get_fortune(name)的結果是Hello, letian.。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.