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. good pics

  2. 如何在两个月的时间内发表一篇EI/SCI论文-我的时间管理心得

    在松松垮垮的三年研究生时期,要说有点像样的成果,也只有我的小论文可以谈谈了.可能有些厉害的角色研究生是丰富而多彩的,而大多数的同学在研究生阶段可能同我一样,是慢悠悠的渡过的,而且可能有的还不如我,我还 ...

  3. 百度地图隐藏LOGO显示

    在引入地图的页面加入下列样式即可隐藏百度地图左下角的LOGO   <style type="text/css">   .anchorBL{display:none;} ...

  4. PHP 获取数组随意下标key的上一个prev和下一个next下标值

    PHP 获取数组随意下标key的上一个prev和下一个next下标值 <? php $xoops[1] = '小'; $xoops[2] = '孩'; $xoops[3] = '子'; $xoo ...

  5. android 智能提示

    <AutoCompleteTextView android:id="@+id/autoCompleteTextView" android:completionThreshol ...

  6. 「CF375D Tree and Queries」

    题目 \(dsu\ on\ tree\)的板子题了 \(dsu\ on\ tree\)本质上一种优秀通过轻重链剖分优化到\(O(nlogn)\)的暴力 一般用来解决没有修改的允许离线的子树查询问题 首 ...

  7. Avito Cool Challenge 2018 E. Missing Numbers 【枚举】

    传送门:http://codeforces.com/contest/1081/problem/E E. Missing Numbers time limit per test 2 seconds me ...

  8. 第三章.搭建MyBatis工程环境

    1.数据库的准备: 数据库: create DATABASE mybatis: 数据表: CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREM ...

  9. @RequestParam和@PathVariable的区别及其应用场景

    @RequestParam和@PathVariable这两者之间区别不大,主要是请求的URL不一样 用@RequestParam请求接口时,URL是:http://www.test.com/user/ ...

  10. Java构造器(构造方法)与方法区别

    构造器,又称为构造方法.构造器用于构造该类的实例,也就是对象. 格式如下:[修饰符]  类名 (形参列表){//n条语句} 构造方法是一种特殊的方法,与一般的方法区别:  1.构造方法的名字必须与定义 ...