版权声明:有一种生活不去经历不知其中艰辛,有一种艰辛不去体会,不会知道其中快乐,有一种快乐,没有拥有不知其中纯粹 https://blog.csdn.net/wwwzydcom/article/details/82962934
JAVA的RMI指的是远程方法的调用,能够让某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法,JVM可以位于同一个或多个计算机上,而且一个JVM可以调用存储其他JVM的对象的方法
RMI:实现远程过程调用的应用程序接口,客户机上运行的程序调用远程服务器上的对象,实现可以在网络环境中分布操作
依赖于接口,编程只需关心如何通过自己的接口句柄发送消息
本质:使用代理类封装Socket通信的细节
常用API
1.Remote接口:每一个暴露出去的java类,要实现Remote接口,并且抛出RemoteException
2.UnicastRemoteObject类:服务端程序的实现方案之一继承这个类,无参构造也要抛出RomoteException
3.LocateRegistry类:创建能在特定接口接受远程对象注册服务程序
4.Naming类:提供存储和获得远程对象注册服务程序中的远程对象进行引用的注册服务程序
没有借助spring实现的RMI
定义一个共同的接口
package com.sxt;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IHelloService extends Remote {
public String sayHello(String msg)throws RemoteException;
}
接口实现类
`package com.sxt.Imp;
import com.sxt.IHelloService;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class HelloServiceImpl extends UnicastRemoteObject implements IHelloService {
private static final long serialVersionUID = -5672932066566630040L;
public HelloServiceImpl() throws RemoteException{
}
@Override
public String sayHello(String msg) throws RemoteException {
System.out.println("服务器端收到信息"+msg);
return "hello"+msg;
}
}
定义客户端
package com.sxt;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
public class Client {
public static void main (String[] args) throws RemoteException, NotBoundException, MalformedURLException {
IHelloService helloService = (IHelloService) Naming.lookup("rmi://localhost:8888/hello");
System.out.println(helloService.sayHello("Im ok"));
}
}
定义服务端
package com.sxt;
import com.sxt.Imp.HelloServiceImpl;
import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main (String[] args) throws MalformedURLException, AlreadyBoundException, RemoteException {
//注册端口
LocateRegistry.createRegistry(8888);
//对外发布rmi服务
Naming.bind("rmi://localhost:8888/hello",new HelloServiceImpl());
}
}