RMI(远程接口调用)
1. RMI的原理:
RMI系统结构,在客户端和服务器端都有几层结构。
方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。
2. RMI(远程方法调用)的组成
一个正常工作的RMI系统由下面几个部分组成:
•远程服务的接口定义
•远程服务接口的具体实现
•桩(Stub)和框架(Skeleton)文件
•一个运行远程服务的服务器
•一个RMI命名服务,它允许客户端去发现这个远程服务
•类文件的提供者(一个HTTP或者FTP服务器)
•一个需要这个远程服务的客户端程序
3. RMI的实现
(1) 服务器端的实现
编写一个远程接口
package com.gjy.rmi.service;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface AddServer extends Remote {
public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException;
}
(2) 编写远程接口的实现
package com.gjy.rmi.service;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class AddServerImpl extends UnicastRemoteObject implements AddServer {
public AddServerImpl() throws RemoteException {
super();
}
public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException {
return firstnumber + secondnumber;
}
}
(3) 编写服务器端程序
package com.gjy.rmi.service;
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class RmiServer {
/**
* 启动 RMI 注册服务并进行对象注册
*/
public static void main(String[] argv)
{
try
{
//启动RMI注册服务,指定端口为1099 (1099为默认端口)
//也可以通过命令 $java_home/bin/rmiregistry 1099启动
//这里用这种方式避免了再打开一个DOS窗口
//而且用命令rmiregistry启动注册服务还必须事先用RMIC生成一个占位程序(stub类)为它所用
LocateRegistry.createRegistry(1099);
//创建远程对象的一个或多个实例,下面是hello对象
//可以用不同名字注册不同的实例
AddServer add = new AddServerImpl();
//把hello注册到RMI注册服务器上,命名为Hello
Naming.rebind("Hello", add);
//如果要把hello实例注册到另一台启动了RMI注册服务的机器上
//Naming.rebind("//192.168.1.105:1099/Hello",hello);
System.out.println("Hello Server is ready.");
}
catch (Exception e)
{
System.out.println("Hello Server failed: " + e);
}
}
}
(4) 编写客户端程序
package com.gjy.rmi.client;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import com.gjy.rmi.service.AddServer;
public class RmiClient {
public static void main(String args[]) throws RemoteException, MalformedURLException, NotBoundException {
String url="rmi://127.0.0.1/Hello";
AddServer add;
add = (AddServer)Naming.lookup(url);
int result=0;
for (int i =0;i<10;i++){
result = add.AddNumbers(10,i);
System.out.println(result);
}
}
}
分享到:
相关推荐
1. **创建远程接口(Remote Interface)**:远程接口定义了客户端可以调用的服务端方法。这些接口必须继承自`java.rmi.Remote`,并且声明可能会抛出`java.rmi.RemoteException`的异常。 2. **实现远程接口(Remote ...
Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...
RMI远程方法调用是Java平台上的一个关键特性,它允许Java对象在不同的JVM之间进行通信,从而实现分布式计算。RMI的核心理念是让开发者能够像调用本地方法一样调用远程对象的方法,简化了分布式系统的设计和实现。 *...
- **序列化**:RMI要求所有跨网络传输的对象都是可序列化的,因此,远程接口中的参数和返回类型必须实现`java.io.Serializable`接口。 - **安全性**:RMI支持Java安全模型,可以控制客户端对远程对象的访问权限。 ...
在文件名"RMI_Test"中,我们可以推测这是一个关于RMI的测试项目,可能包含了实现RMI的源代码,包括服务器端的远程接口和实现、客户端的调用逻辑,以及可能的测试用例。通过阅读和分析这个项目,可以深入理解RMI的...
在Java RMI中,有一个远程接口(Remote Interface),它定义了可以在远程对象上调用的方法。这些方法的实现通常在一个远程服务器上,而客户端通过RMI机制来调用这些方法。RMI会自动处理网络通信、序列化和反序列化等...
RMI采用JRMP(Java Remote Method Protocol)通讯协议,是构建在TCP/IP协议上的一种远程调用方法。...同时,RMI定义了一组远程接口,可以用于生成远程对象。客户机可以像本地对象的方法一样用相同的语法调用远程对象。
java jdk1.8; eclipse 开发环境;实现A机器的程序,可以管理(增加、删除、改等)B机器上...要求定义远程接口类及实现类:定义相应的处理方法;客户端利用RMI实现远程调用服务。同时,在在两台机器之间验证结果正确。
1. **定义远程接口**:定义一个继承自`java.rmi.Remote`的接口,如`BankService`,并声明可能会抛出`java.rmi.RemoteException`的远程方法。 2. **实现远程接口**:创建一个实现了`BankService`接口的类,例如`...
1. **远程接口(Remote Interface)**:这是定义远程方法的接口,它继承了java.rmi.Remote接口。远程接口中的每个方法都可能抛出RemoteException,表示网络通信中可能出现的问题。 2. **远程实现(Remote ...
### RMI远程调用代码及使用方法 #### 一、RMI简介 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过...
Java RMI(Remote Method Invocation,远程方法调用...通过分析提供的"RMI 远程方法调用"资源,你可以深入了解RMI的实现细节,包括创建远程接口和实现、注册远程对象、调用远程方法等步骤,从而在实际项目中灵活运用。
**RMI远程调用详解** 远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种机制,它允许一个Java对象调用另一个在不同Java虚拟机(JVM)上的对象的方法。RMI是Java分布式计算的核心技术,主要...
在这个“RMI远程时钟调用 java程序”中,我们看到的是一个利用RMI实现的远程时钟服务,该服务可以在用户指定的时间间隔内更新显示时间。 1. **RMI基础概念**:RMI是Java平台的核心特性之一,用于构建分布式应用程序...
远程接口中的方法声明了远程调用的行为,但不包含方法的实现。 2. **远程对象(Remote Object)**:实现了远程接口的具体类实例,它是实际提供服务的对象。远程对象通过Java序列化机制被编码为字节流,然后在网络上...
1. 远程接口(Remote Interface):定义了可以被远程调用的方法,这些方法必须声明抛出`java.rmi.RemoteException`。接口需要使用`@Remote`注解标记。 2. 远程实现类(Remote Implementation):实现了远程接口,并...
3. **实现远程接口**:然后,创建一个实现了远程接口的类,并且这个类需要使用`java.rmi.Remote`作为父接口。实现类必须抛出`java.rmi.RemoteException`,因为网络通信中可能出现的任何异常都通过此异常来处理。 4....
1. **远程接口(Remote Interface)**:这是定义远程方法的接口,必须继承自java.rmi.Remote接口。接口中的每个方法都必须抛出java.rmi.RemoteException,因为任何跨网络的通信都可能引发异常。 2. **远程实现...
在Java RMI中,远程接口是一个实现了`java.rmi.Remote`接口的Java接口。接口中声明的方法将在客户端调用,实际上会在服务器端执行。例如: ```java public interface MyRemoteInterface extends Remote { String ...
在这个场景中,“rmi远程调用读取文件”指的是通过RMI机制,使得一个JVM中的程序能够请求另一个JVM上的程序读取并返回文件内容。这种方式在分布式系统中非常常见,可以用于数据共享、文件服务等应用。 RMI的基本...