遠端呼叫使得呼叫遠端伺服器的物件、方法的方式就和呼叫本地物件、方法的方式差不多,因為我們通過網路程式設計把這些都隱藏起來了。遠端呼叫是分布式系統的基礎。
遠端呼叫一般分為兩種,遠端過程呼叫(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 當...