Java—RMI:远程方法调用,基于TCP协议
RMI简介:
远程方法调用,是JDK1.2推出的功能,它可以 实现Java应用中可以像调用本地方法一样调用另一个服务器中Java应用(JVM)中的内容。
RMI是Java语言的远程调用,无法实现跨语言。
执行流程:
Registry(注册表,注册中心,远程过程的定位,而不是调用。协议式的远程访问,rmi协议请求方式不在是post或get了,而是接口别名,可以随意起名。但是要保证这个接口是唯一的。同一个IP、同一个端口唯一。)是放置所有服务器对象的命名空间。每次服务端创建一个对象时,它都会使用bind()或rebind()方法注册该对象。这些是使用称为绑定名称的唯一名称注册的。
要调用远程对象,客户端需要该对象的应用。即通过服务端绑定的名称从注册表中获取对象(lookup()方法)。
API介绍:
Remote:java.rmi.Remote 定义了此接口为远程调用接口。如果接口被外部调用,选哟继承此接口。
RemoteException:java.rmi.RemoteException 继承了Remote接口的接口中,如果方法是允许被远程调用的,需要抛出异常
UnicastRemoteObject:java.rmi.server.UnicastRemoetObject 此类实现了Remote接口和Serializable接口,自定义接口实现类除了实现自定义接口还需要继承此类。
LocateRegistry:java.rmi.registry.LocateRegistry 可以通过LocateRegistry在本机上创建Registry,通过特定的端口就可以访问这个Registry
Naming:java.rmi.Naming Naming定义了发布内容访问RMI名称,也是通过Naming获取指定的远程方法。
具体上我们是怎么用RMI开发的呢,首先我们先写一个Server(服务器),在写一个Client(控制端),这两个都是用RMI技术进行的开发。
下面是我们的代码操作的部分:
创建一个项目:
rmi_rpc
下面我们在创建一个服务器项目
rmi_rpc_server
不用写任何的依赖,只要有接口JDK就行,运行的话就要需要一个标准,接口我的服务器和客户端都要用,所以我们最好就是把这个标准独立出去。
创建接口类型的标准
里面无需定义其它东西只需要写一个接口即可。
package com.bjsxt.rmi.api;
import java.rmi.Remote;
//定义一个远程服务器接口,RMI强制要求,必须是Remote接口的实现,标记接口,里面没有任何东西
public interface FirstInterface extends Remote {
//RMI强制要求,所有的远程服务方法,必须抛出异常RuntimeException
/*
服务器实现它,客户端基于它动态代理
*/
String first(String name) throws RuntimeException;
}
服务器的实现;
1、在服务器的pom.xml文件中导入接口项目的依赖
<dependencies