好程式設計師Java培訓分享之RMI與RPC的區別
好程式設計師Java培訓分享 之RMI與RPC的區別, 隨著java技術學習的不斷深入,越來越覺得保持初心是多麼重要,無論我們學到哪個程度,在學習的時候始終保持初學者的心態,才能在自己的技術之上實現突破!
今天有點像雞湯,迴歸正題,繼續更新我的學習筆記:Java技術中的 RMI與RPC的區別。
一:RPC 遠端過程呼叫
RPC(Remote Procedure Call Protocol)遠端過程呼叫協議,透過網路從遠端計算機上請求呼叫某種服務。
一次RPC呼叫的過程大概有10步:
1.執行客戶端呼叫語句,傳送引數
2.呼叫本地系統傳送網路訊息
3.訊息傳送到遠端主機
4.伺服器得到訊息並取得引數
5.根據呼叫請求以及引數執行遠端過程(服務)
6.執行過程完畢,將結果返回伺服器控制程式碼
7.伺服器控制程式碼返回結果,呼叫遠端主機的系統網路服務傳送結果
8.訊息傳回本地主機
9.客戶端控制程式碼由本地主機的網路服務接收訊息
10.客戶端接收到呼叫語句返回的結果資料
二:RMI 遠端方法呼叫
RMI:遠端方法呼叫(Remote Method Invocation)。能夠讓在客戶端Java虛擬機器上的物件像呼叫本地物件一樣呼叫服務端java 虛擬機器中的物件上的方法。
RMI遠端呼叫步驟:
1,客戶呼叫客戶端輔助物件stub上的方法
2,客戶端輔助物件stub打包呼叫資訊(變數,方法名),透過網路傳送給服務端輔助物件skeleton
3,服務端輔助物件skeleton將客戶端輔助物件傳送來的資訊解包,找出真正被呼叫的方法以及該方法所在物件
4,呼叫真正服務物件上的真正方法,並將結果返回給服務端輔助物件skeleton
5,服務端輔助物件將結果打包,傳送給客戶端輔助物件stub
6,客戶端輔助物件將返回值解包,返回給呼叫者
7,客戶獲得返回值
三:RPC與RMI的區別
1:方法呼叫方式不同:
RMI中是透過在客戶端的Stub物件作為遠端介面進行遠端方法的呼叫。每個遠端方法都具有方法簽名。如果一個方法在伺服器上執行,但是沒有相匹配的簽名被新增到這個遠端介面(stub)上,那麼這個新方法就不能被RMI客戶方所呼叫。
RPC中是透過網路服務協議向遠端主機傳送請求,請求包含了一個引數集和一個文字值,通常形成“classname.methodname(引數集)”的形式。RPC遠端主機就去搜尋與之相匹配的類和方法,找到後就執行方法並把結果編碼,透過網路協議發回。
2:適用語言範圍不同:
RMI只用於Java;
RPC是網路服務協議,與作業系統和語言無關。
3:呼叫結果的返回形式不同:
Java是物件導向的,所以RMI的呼叫結果可以是物件型別或者基本資料型別;
RMI的結果統一由外部資料表示 (External Data Representation, XDR) 語言表示,這種語言抽象了位元組序類和資料型別結構之間的差異。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2700770/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java培訓分享Java EE與Java的區別程式設計師Java
- 好程式設計師Java培訓分享Java和HTML的區別?程式設計師JavaHTML
- 好程式設計師Java培訓分享int和Integer的區別程式設計師Java
- 好程式設計師Java培訓分享treeset和hashset的區別程式設計師Java
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java培訓分享Java之反射技術程式設計師Java反射
- 好程式設計師Python培訓分享Python如何呼叫RPC介面程式設計師PythonRPC
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享Spring Ioc的原理程式設計師JavaSpring
- 好程式設計師Java培訓分享maven-概述程式設計師JavaMaven
- 好程式設計師Python培訓分享print和return的作用及區別程式設計師Python
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享Java之命名、標示符、變數程式設計師Java變數
- 好程式設計師Java培訓分享如何快速入門Java程式設計師Java
- 好程式設計師Java培訓分享Java包是什麼?程式設計師Java
- 好程式設計師Java培訓分享Java多執行緒程式設計師Java執行緒
- 好程式設計師Java培訓分享本地快取如何設計程式設計師Java快取
- 好程式設計師Java培訓分享Java面試題之Java集合篇三程式設計師Java面試題
- 好程式設計師Java培訓分享Java教程垃圾回收與演算法程式設計師Java演算法
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享For迴圈詳解程式設計師Java
- 好程式設計師Java培訓分享SpringBoot入門篇程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享註解與反射原理說明程式設計師Java反射
- 好程式設計師Java培訓分享學Java程式設計要注意什麼程式設計師Java
- 好程式設計師Java培訓分享面試Java的注意事項程式設計師Java面試
- 好程式設計師Java培訓分享Java集合的兩種排序方法程式設計師Java排序
- 好程式設計師Java培訓分享Java物件導向概念解析程式設計師Java物件
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師大資料培訓分享如何區分Hive與HBase程式設計師大資料Hive
- 好程式設計師Python培訓分享Python系列之字串的使用程式設計師Python字串
- 好程式設計師Java培訓分享MySQL算術運算子程式設計師JavaMySql
- 好程式設計師Java培訓分享SpringBoot -自動配置原理程式設計師JavaSpring Boot
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師大資料培訓分享spark之Scala程式設計師大資料Spark