RPC和RMI遠端呼叫

2021-10-01 23:33:23 字數 2353 閱讀 4141

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

遠端呼叫一般分為兩種,遠端過程呼叫(rpc)和遠端方法呼叫(rmi)。

rpc屬於函式級別的遠端呼叫,其多是通過http傳輸資料,資料形式有xml、json、序列化資料等。在此,用python做乙個xml-rpc的示例。 先給伺服器端server.py:

1

from ******xmlrpcserver import ******xmlrpcserver

2def

add(x, y):3

return x + y

4if __name__ ==

'__main__'

:5 s = ******xmlrpcserver(

('127.0.0.1'

,8080))

6 s.register_function(add)

7 s.serve_forever()8

#s是乙個繫結了本地8080埠的伺服器物件,register_function()方法將函式add註冊到s中。serve_forever()啟動伺服器。 再給個客 戶端client.py:

9from xmlrpclib import serverproxy

10if __name__ ==

'__main__'

:11 s = serverproxy(

"")12

print s.add(3,

4)

現在,執行server.py,然後執行client.py,client.py所在的console會輸出7。

我們用wireshark看一下這期間傳遞的資料是什麼樣子的,請求的資料:

rmi意為遠端方法呼叫,粒度比rpc要大,因為它的基本單位是物件。其大致思路是這樣的:建立rmi伺服器物件,將例項化的某個物件以指定的服務名稱(也可以是多個物件,但是服務名稱不應相同)註冊到rmi伺服器物件中,之後啟動rmi伺服器。伺服器等待客戶端傳送的資料(包括服務名稱、函式名、引數),將處理結果返回給客戶端。 pyro4是乙個基於python的rmi實現,下面我們用pyro4建立乙個rmi伺服器,請看server2.py:

1

import pyro4

2class

greetingmaker

(object):

3def

get_fortune

(self, name):4

return

"hello, . \n"

.format

(name)

5 greeting_maker=greetingmaker(

)6 daemon=pyro4.daemon(

)7 uri=daemon.register(greeting_maker)

8print

"ready. object uri ="

, uri

9 daemon.requestloop(

)10 uri變數是pyro4用自己的方法為greeting_maker物件生成的uri,其中包括套接字以及為greeting_maker生成的唯一的id。這個id相當於服務名稱,當然也可以指定更易懂的服務名稱。下面是客戶端client2.py:

11import pyro4

12 uri=

raw_input

(" pyro uri : "

).strip(

)13 name=

raw_input

("your name: "

).strip(

)14 greeting_maker=pyro4.proxy(uri)

15print 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.。

原文出自

遠端呼叫框架RPC

rpc就是 遠端呼叫框架 remote procedure call 遠端呼叫意思就是 被呼叫方法的具體實現不在程式執行本地,而是在別的某個遠端地方。比如 a client 呼叫 b server 提供的remoteadd方法 首先a與b之間建立乙個tcp連線 然後a把需要呼叫的方法名 這裡是rem...

RPC與RMI的區別

一 rpc 遠端過程呼叫 rpc remote procedure call protocol 遠端過程呼叫協議,通過網路從遠端計算機上請求呼叫某種服務。一次rpc呼叫的過程大概有10步 1.執行客戶端呼叫語句,傳送引數 2.呼叫本地系統傳送網路訊息 3.訊息傳送到遠端主機 4.伺服器得到訊息並取得...

RPC遠端呼叫和重試冪等

1 在同步rpc遠端呼叫中,如果呼叫介面失敗或者超市,這時候客戶端都會採用重試機制,這就導致可能存在伺服器服務處理重複消費 2 介面產生重複消費的原因 1 表單重複提交 2 rpc呼叫介面過程中產生重試 3 說下rpc呼叫介面如何保證冪等性 token 訊息中介軟體如何保證明燈性 全域性唯一id 當...