成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

遠程方法調用RMI詳解,和RPC的思路很相似

網絡 網絡管理
RPC (Remote Procedure Call):遠程方法調用,用于一個進程調用另一個進程中的過程,從而提供了過程的分布能力。

[[268642]]

RMI的定義

RPC (Remote Procedure Call):遠程方法調用,用于一個進程調用另一個進程中的過程,從而提供了過程的分布能力。

RMI(Remote Method Invocation):遠程方法調用,即在RPC的基礎上有向前邁進了一步,提供分布式對象間的通訊。允許運行在一個java 虛擬機的對象調用運行在另一個java虛擬機上對象的方法。這兩個虛擬機可以是運行在相同計算機上的不同進程中,也可以是運行在網絡上的不同計算機中。

RMI的全稱宗旨就是盡量簡化遠程接口對象的調用。

RMI大大增強了java開發分布式應用的能力,例如可以將計算方法復雜的程序放在其他的服務器上,主服務器只需要去調用,而真正的運算是在其他服務器上進行,***將運算結果返回給主服務器,這樣就減輕了主服務器的負擔,提高了效率(但是也有其他的開銷)。

RMI網絡模型

在設計初始階段,我們真正想要的是這樣一種機制,客戶端程序員以常規方式進行方法調用,而無需操心將數據發送到網絡上或者解析響應之類的問題。所以才有了如下的網絡模型:在客戶端為遠程對象安裝一個代理。代理是位于客戶端虛擬機中的一個對象,它對于客戶端程序來說,就像是要訪問的遠程對象一樣。客戶端調用此代理時,只需進行常規的方法調用。而客戶端代理則負責使用網絡協議與服務器進行聯系。

 

 

遠程方法調用RMI詳解,和RPC的思路很相似

 

 

現在的問題在于代理之間是如何進行通信的?通常有三種方法:

1、CORBA:通過對象請求代理架構,支持任何編程語言編寫的對象之間的方法調用。

2、SOAP

3、RMI:JAVA的遠程方法調用技術,支持java的分布式對象之間的方法調用。

其中CORBA與SOAP都是完全獨立于言語的,可以使用C、C++、JAVA來編寫,而RMI只適用于JAVA。

RMI的工作原理

一、術語介紹

1、存根:當客戶端要調用遠程對象的一個方法時,實際上調用的是代理對象上的一個普通方法,我們稱此代理對象為存根(stub)。存根位于客戶端機器上,而非服務器上。

2、參數編組:存根會將遠程方法所需的參數打包成一組字節,對參數編碼的過程就稱為參數編組。參數編組的目的是將參數轉換成適合在虛擬機之間進行傳遞的格式,在RMI協議中,對象是使用序列化機制進行編碼的。

二、編程模型

為了介紹RMI的編程模型,我下面會編寫一個DEMO。遠程對象表示的是一個倉庫,而客戶端程序向倉庫詢問某個產品的價格。

1、接口定義

遠程對象的能力是由在客戶端和服務器之間共享的接口所表示的:

 

 

遠程方法調用RMI詳解,和RPC的思路很相似

 

 

遠程對象的接口必須擴展Remote接口,它位于java.rmi包中。接口中所有的方法必須聲明拋出RemoteException異常。這是因為遠程方法總是存在失敗的可能,所以java編程語言要求每一次遠程方法的調用都必須捕獲RemoteException,并且指明當調用不成功時應執行的相應處理操作。

2、接口的實現

 

遠程方法調用RMI詳解,和RPC的思路很相似

 

你可以看出這個類是遠程方法調用的目標,因為它擴展自UnicastRemoteObject,這個類的構造器使得它的對象可供遠程訪問。

3、RMI注冊表:通過JNDI發布RMI服務

  1. 要訪問服務器上的一個遠程對象時,客戶端必須先得到一個本地的存根對象,也就是客戶端機器上的代理對象。那么問題來了,如何才能得到這個存根呢?
  2. 為此,JDK提供了自舉注冊服務(bootstrap registry service),服務器程序應該使用自舉注冊服務來注冊至少一個遠程對象。
  3. 而要注冊一個遠程對象,需要一個RMI URL和一個對實現對象的引用。
  4. RMI 的URL以rmi:開頭,后接域名或IP地址(host),緊接著是端口號(port),***是服務名(service)。

如:rmi://regserver.mycompany.cmo:99/central_warehouse

如果我們是在本地發布RMI服務,那么host就是“localhost”,此外RMI默認的端口號是“1099”,當然我們也可以自行設置,只要不與其他端口重復即可。 service實際上是基于同一個host與port下唯一的服務名。

發布RMI服務:

 

 

遠程方法調用RMI詳解,和RPC的思路很相似

 

 

運行結果:

  1. Constructing server implementation 
  2. Binding server implementation to registry 
  3. Waiting for invocations from clients ... 
  1. 第20行只需提供一個port,就在JNDI中創建了一個注冊表。
  2. 第21行通過bind方法綁定了RMI地址與RMI服務實現類。
  3. 執行這個方法后,相當于自動發布了RMI服務。接下來要做的事情就是寫一個RM客戶端調用已發布的RMI服務。

4、調用RMI服務

 

遠程方法調用RMI詳解,和RPC的思路很相似

 

運行結果:

  1. RMI registry binding: 
  2. mate7:3700.0 
  1. 服務調用只需要知道兩個東西:1、RMI請求路徑;2、RMI接口名
  2. 第15行,這里用的是接口名Warehouse,而不是實現類。一定不能RMI接口的實現類,否則就是本地調用了。
  3. 查看運行結果,我們知道這次DEMO展示的遠程調用成功了。

5、下面我們來看下RMI的網絡示意圖:

 

 

遠程方法調用RMI詳解,和RPC的思路很相似

 

 

  1. 借助JNDI這個所謂的命名與目錄服務,我們成功地發布并調用了RMI服務。實際上,JNDI就是一個注冊表,服務端將服務對象放入到注冊表中,客戶端從注冊表中獲取服務對象。
  2. 在服務端我們發布了RMI服務,并在JNDI中進行了注冊,此時就在服務端創建了一個Skeleton(骨架),當客戶端***次成功連接JNDI并獲取遠程服務對象后,立馬在本地創建了一個Stub(存根)。
  3. 遠程通信實際是通過Skeleton與Stub來完成的,數據是基于TCP/IP協議,在“傳輸層”上發送的。
  4. 毋庸置疑,理論上RMI一定比WebService要快,畢竟WebService是基于http協議的,而http所攜帶的數據是通過“應用層”來傳輸的。傳輸層較應用層更為底層,越底層越快。

RMI的局限性

  1. 只能實現JAVA系統之間的調用,而WebService可以實現跨語言實現系統之間的調用。
  2. RMI使用了JAVA默認的序列化方式,對于性能要求比較高的系統,可能需要其他的序列化方案來解決。
  3. RMI服務在運行時難免會存在故障,例如,如果RMI服務無法連接了,就會導致客戶端無法響應的現象。
責任編輯:武曉燕 來源: 博客園
相關推薦

2012-02-07 13:21:37

Java

2012-04-11 11:10:25

JavaRMI

2014-09-02 10:43:45

RedisRPC

2024-05-31 08:45:24

2016-04-21 10:10:31

Java應用架構

2018-06-12 15:10:49

RPCRM企業

2024-08-29 09:03:56

2015-06-09 13:31:29

Hadoop RPC遠源碼解析

2018-02-28 14:04:08

RMIJDBC存儲

2023-05-18 08:47:42

2025-05-29 01:22:00

FeignJSONRPC

2024-09-14 14:14:26

Dubbo框架微服務

2024-08-01 17:20:55

2023-03-15 08:39:07

遠程服務調用

2009-09-02 10:49:46

C#調用析構方法

2022-01-07 06:12:08

RPC框架限流

2012-11-08 00:46:00

AMD服務器芯片

2021-05-11 00:08:00

JavaRMI 分布式

2009-08-05 14:54:09

VB調用C#類庫

2020-01-09 11:11:35

RPC框架調用遠程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产高清精品一区 | 免费三级av | 精品在线看 | 色婷婷婷婷色 | 夜夜夜久久久 | 日韩中文字幕在线视频 | av中文字幕在线播放 | 一级片视频免费 | 久久久久无码国产精品一区 | 日本久久网 | 欧美精品久久一区 | 亚洲日本欧美日韩高观看 | hsck成人网| 国产不卡一区 | 国产精品久久久久久吹潮日韩动画 | 国产精品久久久久久一区二区三区 | 精品国产一二三区 | 久久国产欧美日韩精品 | 99亚洲精品 | 日韩久久久久 | 欧美激情精品久久久久久 | 在线观看免费av网 | 久久亚洲视频 | 精品亚洲一区二区三区 | 午夜在线 | 欧美成人免费在线视频 | 狠狠天天| 久久av一区 | 中文字幕综合 | 播放一级毛片 | 日韩精品免费在线观看 | www.天天操.com| 日韩精品区 | 激情网站在线观看 | 91亚洲国产成人久久精品网站 | 不卡一区二区三区四区 | 午夜欧美 | 免费国产一区 | 视频一二三区 | 国产精品特级毛片一区二区三区 | 成人精品鲁一区一区二区 |