java RMI(Remote Method Invocation)是一种基于java远程调用技术,是对RPC的java实现,可以在不同主机上进行通信与方法调用。PRC通信原理如图:

方法调用从客户对象经占位程序(Stub)、远程引用层(Remote Reference Layer)和传输层(Transport Layer)向下,传递给主机,然后再次经传 输层,向上穿过远程调用层和骨干网(Skeleton),到达服务器对象。 占位程序扮演着远程服务器对象的代理的角色,使该对象可被客户激活。 远程引用层处理语义、管理单一或多重对象的通信,决定调用是应发往一个服务器还是多个。传输层管理实际的连接,并且追追踪可以接受方法调用的远程对象。服务器端的骨干网完成对服务器对象实际的方法调用,并获取返回值。返回值向下经远程引用层、服务器端的传输层传递回客户端,再向上经传输层和远程调用层返回。最后,占位程序获得返回值。

要完成以上步骤需要有以下几个步骤:
1、生成一个远程接口
2、实现远程对象(服务器端程序)
3、生成占位程序和骨干网(服务器端程序)
4、编写服务器程序
5、编写客户程序
6、注册远程对象
7、启动远程对象
具体实现代码如下:
远程接口定义:
 package com.corearchi.rmi.api;

 import java.rmi.Remote;
import java.rmi.RemoteException; /**
* 远程接口HelloService
*
* @author DonnieGao
* @create 2018-01-29 上午10:14
**/
public interface HelloService extends Remote { /**
* 远程接口方法sayHello
*
* @param somebody 某个人
* @return 返回调用接口结果
* @throws RemoteException 抛出RemoteException异常
*/
String sayHello(String somebody) throws RemoteException;
}

远程接口实现:

package com.corearchi.rmi.impl;

import com.corearchi.rmi.api.HelloService;

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject; /**
* 远程接口HelloService的实现
*
* @author DonnieGao
* @create 2018-01-29 上午10:18
**/
public class HelloServiceImpl extends UnicastRemoteObject implements HelloService{ /** 父类构造抛出异常,子类也需抛出异常 */
public HelloServiceImpl() throws RemoteException {
} /**
* 远程接口方法sayHello
*
* @param somebody 某个人
* @return 返回调用接口结果
* @throws RemoteException 抛出RemoteException异常
*/
@Override
public String sayHello(String somebody) throws RemoteException {
return "hello" + somebody;
}
}

客户端Server实现:

 package com.corearchi.rmi.server;

 import com.corearchi.rmi.api.HelloService;
import com.corearchi.rmi.impl.HelloServiceImpl; import java.net.MalformedURLException;
import java.rmi.AlreadyBoundException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry; /**
* 远程Rmi服务端
*
* @author DonnieGao
* @create 2018-01-29 上午10:25
**/
public class HelloServer { public static void main(String[] args) throws RemoteException, AlreadyBoundException, MalformedURLException {
// 创建远程服务接口
HelloService helloService = new HelloServiceImpl(); // 注册服务
LocateRegistry.createRegistry(1234);
Naming.bind("rmi://localhost:1234/helloService",helloService); System.out.println("HelloServer has started and provide RPC service at the same time");
}
}
 package com.corearchi.rmi.client;

 import com.corearchi.rmi.api.HelloService;

 import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException; /**
* 远程连接的客户端
*
* @author DonnieGao
* @create 2018-01-29 上午10:29
**/
public class HelloClient { public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {
// 引入远程服务
HelloService helloService = (HelloService) Naming.lookup("rmi://localhost:1234/helloService"); // 调用远程方法
System.out.println("RMI服务器结果是 "+helloService.sayHello("Kitty"));
}
}

一个简单的RMI通信Demo就完成了,先运行Server,在运行Client。

RMI入门HelloWorld的更多相关文章

  1. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  2. Java RMI 入门案例

    Java Remote Method Invocation(Java RMI) 是一个 Java API, 执行远程方法的调用,相当于 Remote Procedure Calls(RPC).Java ...

  3. Wix学习整理(1)——快速入门HelloWorld

    原文:Wix学习整理(1)--快速入门HelloWorld 1 Wix简介 Wix是Windows Installer XML的简称,其通过类XML文件格式来指定了用于创建Windows Instal ...

  4. CodeIgniter入门——HelloWorld

    原文:CodeIgniter入门--HelloWorld CodeIgniter(CI)是一套给PHP网站开发者使用的应用程序开发框架和工具包. 初次接触,来一个HelloWorld~~~ ^_^ 准 ...

  5. Flask入门HelloWorld

    Flask入门HelloWorld Flask官网:http://flask.pocoo.org/ Flask中文翻译:http://dormousehole.readthedocs.io/en/la ...

  6. java rmi 入门实例

    java rmi 入门实例 (2009-06-16 16:07:55) 转载▼ 标签: java rmi 杂谈 分类: java-基础    java rmi即java远程接口调用,实现了2台虚拟机之 ...

  7. Windows Eclipse Scala的入门HelloWorld

    [学习笔记] Windows Eclipse Scala的入门HelloWorld 有关带scala版本的eclipse4.7的下载, 你可以直接去: http://scala-ide.org/dow ...

  8. Springboot2.x入门——helloWorld

    Springboot2.x入门--helloWorld 一.简介 1.1 Springboot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的 ...

  9. Java RMI之HelloWorld经典入门案例

    Java RMI 指的是远程方法调用 (Remote Method Invocation).它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法.可以用此方 ...

随机推荐

  1. MacOS上好用的软件

    持续补充中…… 记录一些除了MacOS(Sierra)自带工具外,其他好用的软件. 截屏软件 Jietu——在AppStore中查找“Jietu”就可以找到这款软件.这是腾讯出品的一款用于MacOS系 ...

  2. 配置管理SVN软件具体操作

    配置管理(SVN) CM:configuration management  配置管理人员 什么是SVN SVN --Subversion --是一个开放源代码的版本控制系统 --时下流行的有SVN和 ...

  3. 面试知识整理-Java基础

    三大特征:封装,继承,多态 多态:简单的说就是用同样的对象引用调用同样的方法但是做了不同的事情. 抽象:抽象是将一类对象的共同特征总结出来构造类的过程 包装,可以讲基本类型当做对象来使用,抽象只关心对 ...

  4. linux shell数据重定向

    标准输入 (stdin) :代码为 0 ,使用 < 或 << :标准输出 (stdout):代码为 1 ,使用 > 或 >> :标准错误输出(stderr):代码为 ...

  5. libevent-signal(1)

    现在已经知道,libevent有三种事件类型,分别是时钟事件,信号事件,i/o事件.今天就分析一下信号事件,下面是一个简单的信号事件demo #include <sys/types.h> ...

  6. bzoj1413 [ZJOI2009]取石子游戏

    Description 在研究过Nim游戏及各种变种之后,Orez又发现了一种全新的取石子游戏,这个游戏是这样的: 有n堆石子,将这n堆石子摆成一排.游戏由两个人进行,两人轮流操作,每次操作者都可以从 ...

  7. 2018.09.23模拟总结(T2)

    T1,T3我就不说啦,反正也不会.主要想讲的是T2. T2用了一个神奇的算法:折半搜索. 因为这个坑爹的数据范围告诉我们暴搜或是状压会TLE,而一半刚好能卡过去. 折半搜索其实跟暴搜没什么区别,就是折 ...

  8. Spring data JPA先排序再分页。

    //工具类,增删改查等等package com.yunqing.service.impl; import java.util.Map; import org.springframework.beans ...

  9. 配置git

    https://blog.csdn.net/qq_34446663/article/details/81106018

  10. android中OpenMax的实现【3】OMX中主要成员

    原文 http://blog.csdn.net/tx3344/article/details/8117908 通过上文知道了,每个AwesomePlayer 只有一个OMX服务的入口,但是Awesom ...