Java RMI介绍

RMI概要

RMI远程方法调用,是计算机之间通过网络实现对象调用的一种机制。这种机制,可以让远端计算机上的对象就好像本地对象一样。相对于TCP/IP,这种面向过程的开发,开发成本大。RMI被设计成一种面向对象的开发方式,比TCP/IP开发方便高效。

RMI使用介绍

制作远程接口:接口文件(传输的类需要可序列化的)

新建接口文件,继承Remote接口,并且定义需要调用的函数。


远端接口的实现:Service文件

目标机器实现远端接口,这步其实很简单,因为接口中需要的函数实现已经存在,因此只需要impliment接口即可。


RMI服务端注册,开启服务

在目标机器上创建服务实例,并且绑定rmi地址与服务。


RMI代理端通过RMI查询到服务端,建立链接,并且通过接口调用远程方法

RMI客户端通过lookup的方式查找网络上的服务。


RMI小demo

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface MyRemote extends Remote{//需要远程调用的方法

	public String sayHello() throws RemoteException;
	
}
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.server.UnicastRemoteObject;

@SuppressWarnings("serial")
public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote{

	protected MyRemoteImpl() throws RemoteException {
		super();
		// TODO Auto-generated constructor stub
	}

	@Override
	public String sayHello() throws RemoteException {
		// TODO Auto-generated method stub
		return "Hello World!";
	}
	public static void main(String[] args) {//注册服务
		
		try {
			MyRemote service=new MyRemoteImpl();
			 LocateRegistry.createRegistry(6600);  
			Naming.rebind("rmi://127.0.0.1:6600/RemoteHello", service);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println( e.toString());
		} 
		
		
	}
}
import java.rmi.Naming;

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:6600/RemoteHello");//通过serice想当于调用本地方法了,作为一个远端的代理
			String s=service.sayHello();
			System.out.println(s);

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
	}
}


总结

面向对象 相对于面向过程的socket编程,RMI是简易的通讯方案。

简洁        很容易就能实现远程服务的调用


你可能感兴趣的:(rmi)