Java RMI 概述

来源:互联网 发布:30岁程序员找不到工作 编辑:程序博客网 时间:2024/05/23 01:16

定义


Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口。它使客户机上运行的程序可以调用远程服务器上的对象。

如何制作服务端(“Say Hello 为例”)

1.制作服务端接口

import java.rmi.*;public interface MyRemote extends Remote{public String sayHello() throws RemoteException;}

2.制作服务端接口实现

import java.rmi.*;import java.rmi.server.*;public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{public String sayHello(){return "Server says: 'Hello'";}public MyRemoteImpl() throws RemoteException{}public static void main(String[] args){try{MyRemote service = new MyRemoteImpl();Naming.rebind("RemoteHello", service);}catch(Exception e){e.printStackTrace();}}}

3.使用rmic产生stub和skeleton

打开新的cmd命令窗口,执行:

javac MyRemote.javajavac MyRemoteImpl.javarmic MyRemoteImpl

4.启动rmiregistry

打开新的cmd命令窗口,执行:

rmiregistry

5.启动服务端服务

打开新的cmd命令窗口,执行:

java MyRemoteImpl

客户端如何调用?

1.制作客户端

import java.rmi.*;public class MyRemoteClient{public static void main(String[] args){new MyRemoteClient().go();}public void go(){try{MyRemote service = (MyRemote)Naming.lookup("rmi://127.0.0.1/RemoteHello");String s = service.sayHello();System.out.println(s);}catch(Exception e){e.printStackTrace();}}}

2.运行

javac MyRemoteClient.javajava MyRemoteClient

输出结果:Server says: 'Hello'

(需要保证服务端第三步制作的stub与客户端程序在同一个目录)


原理

原理图

总结:Client程序通过查找客户端stub与服务端的Skeleton进行通信,服务端的Skeleton调用服务端的实际执行程序,最终结果通过Skeleton、Stub返回给Client