天天看點

RMI和RPC的差別

轉自:https://blog.csdn.net/a363722188/article/details/41147675

遠端對象方法調用并不是新概念,遠端過程調用 (RPC-remote procedurecall) 已經使用很多年了。遠端過程調用被設計為在應用程式間通信的平台中立的方式,它不理會作業系統之間以及語言之間的差異。即 RPC 支援多種語言,而 RMI(RemoteMethodInvocation)隻支援 Java 寫的應用程式。

另外 RMI 調用遠端對象方法,允許方法傳回 Java 對象以及基本資料類型。而 RPC 不支援對象的概念,傳送到 RPC 服務的消息由外部資料表示 (ExternalData Representation,XDR) 語言表示,這種語言抽象了位元組序類和資料類型結構之間的差異。隻有由 XDR 定義的資料類型才能被傳遞, RPC 不允許傳遞對象。可以說 RMI 是面向對象方式的 JavaRPC 。

RMI和RPC之間最主要的差別在于方法是如何被調用的。在RMI中,遠端接口使每個遠端方法都具有方法簽名。如果一個方法在伺服器上執行,但是沒有相比對的簽名被添加到這個遠端接口上,那麼這個新方法就不能被RMI客戶方所調用。

在RPC中,當一個請求到達RPC伺服器時,這個請求就包含了一個參數集和一個文本值,通常形成“classname.methodname”的形式。這就向RPC伺服器表明,被請求的方法在為“classname”的類中,名叫“methodname”。然後RPC伺服器就去搜尋與之相比對的類和方法,并把它作為那種方法參數類型的輸入。這裡的參數類型是與RPC請求中的類型是比對的。一旦比對成功,這個方法就被調用了,其結果被編碼後傳回客戶方。