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. 关于 Windows 7 语言包

    在对IE浏览器进行多语言对应的时候,网页会检测当前系统的语言,来判断网页需要以哪种语言显示.但是,在给系统安装指定语言包时,可能会遇到安装失败的情况,原因就是需要在你的电脑上安装必需的基本语言包.请看 ...

  2. 利息力(force of interest)

    一.提出问题 二.定义 设积累函数连续可导,则时刻 t 的利息力为 三.单利在 t 时刻的利息力 单利的利息力是时间的递减函数 四.复利在时刻 t 的利息力 复利的利息力是常数!与时间无关. 称为复利 ...

  3. Java字符串工具类

    import java.io.ByteArrayOutputStream;import java.io.UnsupportedEncodingException;import java.lang.re ...

  4. July 21st 2017 Week 29th Friday

    If you want to fly too high in relation to the horizon forget. 要想飞得高,就该把地平线忘掉. Always keep our eyes ...

  5. 《SQL必知必会》总结

    目录   第1章 了解SQL 第2章 检索数据 第3章 排序检索数据 第4章 过滤数据 第5章 高级数据过滤 第6章 用通配符进行过滤 第7章 创建计算字段 第8章 使用数据处理函数 第9章 汇总数据 ...

  6. 我的第一个Python随笔

    自学Python也很长时间了,注册博客园写了第一篇随笔.之前想过很多次,但是始终不知道该怎么开始,内容如何,现在想想,随笔嘛,是自己的想法,也自己的实践,又是自己的锻炼.话不多说,开始今天的正式内容. ...

  7. Microsoft Visual C++ 2005 Redistributable 无法卸载问题解决办法

    今日遇到一个问题,Microsoft Visual C++ 2005 Redistributable 无法卸载,弹出的对话框如下所示: 试了一些网上的方法,比如下载vcredist_x86.exe,解 ...

  8. BZOJ1879:[SDOI2009]Bill的挑战(状压DP)

    Description Input 本题包含多组数据.  第一行:一个整数T,表示数据的个数.  对于每组数据:  第一行:两个整数,N和K(含义如题目表述).  接下来N行:每行一个字符串. T ≤ ...

  9. 【[USACO08FEB]酒店Hotel】

    比较基础的线段树了 我们要维护最大连续子串,这个可以说是一个比较套路的操作了 我们在[SHOI2009]会场预约这道题中已经比较深刻的认识到了这个套路了 对于这道题,我们显然要知道一个区间内最大的全为 ...

  10. Network Security Threats

    Network Security Combination of low-cost powerful computing and high-performance networks is a two-e ...