Java RMI HelloWorld
?
RMI 遠(yuǎn)程方法調(diào)用. 顧名思義就是可以像調(diào)用本地程序方法一樣調(diào)用遠(yuǎn)程(其他JVM)的程序方法.
?
分為3個部分:
Stub:中介,代理. 封裝了遠(yuǎn)程對象的調(diào)用,客戶端需要通過stub與server交流
RemoteServer,:遠(yuǎn)端服務(wù)提供者.也就是RemoteObject
Client:客戶端
?
代碼示意:
?
RemoteObject, 遠(yuǎn)程服務(wù)提供者, 我寫了一個main方法,在本地6600端口啟動這個服務(wù),
想要啟動服務(wù),只要run即可
package demo2; ? import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.server.UnicastRemoteObject; ? publicclassRemoteEchoServerextends UnicastRemoteObject implements RemoteEcho { ? ????PRotected RemoteEchoServer() throws RemoteException { ????????super(); ????} ? ????@Override ????public Object echo(Object object) throws RemoteException { ????????returnobject; ????} ? ????publicstaticvoid main(String[] args) throws Exception { ????????RemoteEchoServer server = new RemoteEchoServer(); ????????LocateRegistry.createRegistry(6600); ????????Naming.rebind("rmi://127.0.0.1:6600/RemoteEchoServer", server); ????} ? } |
?
?
Stub,代理,與RemoteObject交流均需要通過它
?
package demo2; ? import java.rmi.Remote; import java.rmi.RemoteException; ? publicinterfaceRemoteEchoextends Remote { ????Object echo(Object object) throws RemoteException; } |
?
對Stub的進(jìn)一步封裝,即如何得到Stub對象
package demo2; ? import java.rmi.Naming; ? publicclass RemoteEchoFactory { ? ????publicstatic RemoteEcho getEcho() throws Exception { ????????return (RemoteEcho) Naming.lookup("rmi://127.0.0.1:6600/RemoteEchoServer"); ????} } |
?
?
下面就是Client, server啟動后,就能正常跑下面這個程序
package demo2; ? publicclass RemoteEchoClient { ????publicstaticvoid main(String[] args) throws Exception { ????????longstart = System.currentTimeMillis(); ????????RemoteEcho echo = RemoteEchoFactory.getEcho(); ????????System.out.println(echo.echo("kiss u")); ????????System.out.println(System.currentTimeMillis()-start); ????} } |
?
Client 通過本地的Factory得到封裝好的Stub, 他指向了RemoteObject, 然后就可以像調(diào)用本地方法一樣直接用.
?
新聞熱點
疑難解答