天天看點

java socket rmi_RMI和socket詳解

一般來說,基于CS(client-server)軟體架構的開發技術有很多種。比較常用的有:基于socket的網絡程式設計、RPC、基于Java技術的RMI(當然C#也有類似技術)、CORBA等。在這裡我們隻是對基于socket的網絡程式設計與RMI作個對比,有助于我們了解它們各自的應用領域,幫助我們在面對一個具體問題的時候選用适合的技術。另外,本文所做的讨論可以認為是脫離了語言層面的東西,隻是對技術的本身做一個讨論,無關乎你是用C++、C#或Java 在開發。一、RMI技術簡介本文就以Java為例,簡單介紹一下RMI技術。從Java1.1開始,遠端方法調用作為Java分布式對象技術成為Java核心的API之一(在java.rmi.* 包)。RMI的引入,使得Java程式之間能夠實作靈活的,可擴充的分布式通信。RMI允許Java對象存在于多個不同的位址空間,分布在不同的Java虛拟機上。每一個位址空間可以在同一台主機上或者網絡上不同的計算機上。由于遠端方法調用跨越不同的虛拟機邊界到不同的指定的位址空間,是以沒有對象共享的全局變量,這就需要對象序列化(Object Serialization)API,它使得Java對象能夠在不同的JVM之間傳遞。對象序列化是特别為Java的對象設計的,這就意味着Java程式中的對象可以作為對象參數存取(可序列化的對象必須實作Serializable接口)。結合RMI和對象序列化機制,就可以通路越過本地Java虛拟機邊界的對象以及資料。通過RMI,可以調用遠端對象的遠端方法,而通過Java對象序列化機制可以将對象傳遞給這些方法。最基本的Java模型并沒有提供将遠端主機上的Java對象看作本地Java程式位址空間一部分的能力,而RMI祢補了這一不足。另外,由于Java與硬體平台無關的特性,無論是同構的系統還是異構的系統,RMI不需移植就可以順利運作。RMI為Java平台的分布式計算提供了一個簡單而直接的模型。因為Java的RMI技術是基于Java平台的,是以它将Java平台的安全性和可移植性等優點帶到了分布式計算中。RMI大大擴充Java的網絡計算能力,它為編寫基于分布式對象技術的企業級Internet/Intranet應用提供了強大的系統平台支援。Java RMI體系結構如下圖:

java socket rmi_RMI和socket詳解