什么是RMI,为什么要使用RMI框架?

RMI与Spring框架的整合实战指南 远程方法调用(Remote Method Invocation, RMI)是Java提供的一种机制,允许运行在一个Java虚拟机上的对象,调用另一个Java虚拟机上对象的方法。这种机制是建立在Java远程过程调用(Java RMI)基础之上的,允许Java程序在不同的虚拟机之间进行通信和数据交换。创建自定义切面需要定义一个类并使用@Aspect注解标记,之后定义通知方法并使用@Before@After@Around等注解。 阅读详情

这里是修真院后端小课堂,每篇分享文从

八个方面深度解析后端知识/技能,本篇分享的是:

【什么是RMI,为什么要使用RMI框架?】

大家好,我是IT修真院深圳分院第10期的JAVA学员,一枚正直纯洁善良的java程序员。

今天给大家分享一下,修真院官网Java任务8,深度思考中的知识点—什么是RMI,为什么要使用RMI框架?

1.背景介绍

什么是RMI

RMI是Java的一组拥护开发分布式应用程序的API。RMI使用Java语言接口定义了远程对象,它集合了Java序列化和Java远程方法协议(Java Remote Method Protocol)。

RMI有什么用

RMI用于不同Java虚拟机之间的通信,这些虚拟机可以在不同的主机上、也可以在同一个主机上;一个虚拟机中的对象调用另一个虚拟上中的对象的方法,只不过是允许被远程调用的对象要通过一些标志加以标识。RMI中的核心是远程对象(remote object),除了对象本身所在的虚拟机,其他虚拟机也可以调用此对象的方法,而且这些虚拟机可以不在同一个主机上。每个远程对象都要实现一个或者多个远程接口来标识自己,声明了可以被外部系统或者应用调用的方法

 RMI的通信模型

从方法调用角度来看,RMI要解决的问题,是让客户端对远程方法的调用可以相当于对本地方法的调用而屏蔽其中关于远程通信的内容,即使在远程上,也和在本地上是一样的。

实际上,客户端只与代表远程主机中对象的Stub对象进行通信,丝毫不知道Server的存在。客户端只是调用Stub对象中的本地方法,Stub对象是一个本地对象,它实现了远程对象向外暴露的接口,也就是说它的方法和远程对象暴露的方法的签名是相同的。客户端认为它是调用远程对象的方法,实际上是调用Stub对象中的方法。可以理解为Stub对象是远程对象在本地的一个代理,当客户端调用方法的时候,Stub对象会将调用通过网络传递给远程对象。

2.知识剖析

RMI远程调用步骤

1,客户对象调用客户端辅助对象上的方法

2,客户端辅助对象打包调用信息(变量,方法名),通过网络发送给服务端辅助对象

3,服务端辅助对象将客户端辅助对象发送来的信息解包,找出真正被调用的方法以及该方法所在对象

4,调用真正服务对象上的真正方法,并将结果返回给服务端辅助对象

5,服务端辅助对象将结果打包,发送给客户端辅助对象

6,客户端辅助对象将返回值解包,返回给客户对象

7,客户对象获得返回值

如何实现一个RMI程序

1.创建远程接口, 并且继承java.rmi.Remote接口。

2.实现远程接口,并且继承:UnicastRemoteObject

3.创建服务器程序: createRegistry方法注册远程对象,暴露一个监听

4.创建客户端程序,通过ip和端口连接到指定的服务器,并且将数据做封装(序列化)

5.服务器端收到请求,先反序列化。再进行业务逻辑处理。把返回结果序列化返回

3.常见问题

1、数据的传递问题

我们都知道在Java程序中引用类型(不包括基本类型)的参数传递是按引用传递的,对于在同一个虚拟机中的传递时是没有问题的,因为的参数的引用对应的是同一个内存空间,但是对于分布式系统中,由于对象不再存在于同一个内存空间,虚拟机A的对象引用对于虚拟机B没有任何意义,那么怎么解决这个问题呢?

  2、远程对象的发现问题

在调用远程对象的方法之前需要一个远程对象的引用,如何获得这个远程对象的引用在RMI中是一个关键的问题

4.解决方案

a、将引用传递更改为值传递,也就是将对象序列化为字节,然后使用该字节的副本在客户端和服务器之间传递,而且一个虚拟机中对该值的修改不会影响到其他主机中的数据,在Java中一个对象如果能够被序列化,需要满足下面两个条件之一:

1、是Java的基本类型

2、实现java.io.Serializable接口(String类即实现了该接口)

b、在我们日常使用网络时,基本上都是通过域名来定位一个网站,但是实际上网络是通过IP地址来定位网站的,因此其中就需要一个映射的过程,域名系统(DNS)就是为了这个目的出现的,在域名系统中通过域名来查找对应的IP地址来访问对应的服务器。那么对应的,IP地址在这里就相当于远程对象的引用,而DNS则相当于一个注册表(Registry)。而域名在RMI中就相当于远程对象的标识符,客户端通过提供远程对象的标识符访问注册表,来得到远程对象的引用。这个标识符是类似URL地址格式的.

5.编码实战

6.扩展思考

RMI优缺点是什么

优点:可以用于分布式开发,避免重复造轮子

缺点:调用过程很慢,而且该过程是不可靠的,容易发生不可预料的错误,比如网络错误等

7.参考文献

1.优快云博客:https://blog.youkuaiyun.com/u014001866/article/details/50936246

2.优快云博客:https://blog.youkuaiyun.com/lmy86263/article/details/72594760

8.更多讨论

1、RMI优缺点是什么?

优点:可以用于分布式开发,避免重复造轮子

缺点:调用过程很慢,而且该过程是不可靠的,容易发生不可预料的错误,比如网络错误等

2、我们都知道在Java程序中引用类型(不包括基本类型)的参数传递是按引用传递的,对于在同一个虚拟机中的传递时是没有问题的,因为的参数的引用对应的是同一个内存空间,但是对于分布式系统中,由于对象不再存在于同一个内存空间,虚拟机A的对象引用对于虚拟机B没有任何意义,那么怎么解决这个问题呢?

将引用传递更改为值传递,也就是将对象序列化为字节,然后使用该字节的副本在客户端和服务器之间传递,而且一个虚拟机中对该值的修改不会影响到其他主机中的数据,在Java中一个对象如果能够被序列化,需要满足下面两个条件之一:

1)是Java的基本类型

2)实现java.io.Serializable接口(String类即实现了该接口)

3、在调用远程对象的方法之前需要一个远程对象的引用,如何获得这个远程对象的引用在RMI中是一个关键的问题?

在我们日常使用网络时,基本上都是通过域名来定位一个网站,但是实际上网络是通过IP地址来定位网站的,因此其中就需要一个映射的过程,域名系统(DNS)就是为了这个目的出现的,在域名系统中通过域名来查找对应的IP地址来访问对应的服务器。那么对应的,IP地址在这里就相当于远程对象的引用,而DNS则相当于一个注册表(Registry)。而域名在RMI中就相当于远程对象的标识符,客户端通过提供远程对象的标识符访问注册表,来得到远程对象的引用。这个标识符是类似URL地址格式的.

今天的分享就到这里啦,欢迎大家提问和探讨!

技能树.IT修真院“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。

这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。快来与我一起学习吧~我的邀请码:23656198,或者你可以直接点击此链接:http://www.jnshu.com/login/1/23656198

STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 STM32单片机语音提示盲人拐杖整点报时夜间警示超声波测距 关键词:语音提示盲人拐杖 整点报时 超声波测距拐杖 阅读详情

相关推荐

Ansys Lumerical实战:5步搞定Mach-Zehnder调制器多物理场仿真(附眼图分析技巧)

本文详细介绍了使用Ansys Lumerical进行行波马赫-曾德尔调制器多物理场仿真的完整流程。通过CHARGE、MODE和INTERCONNECT三大模块的协同工作,从电学参数提取、光学射频特性分析到系统级眼图评估,分步解析了高效仿真与性能优化的核心技巧,为硅光调制器设计提供了实战指南。

weixin_29056781的博客 540

fastjson 序列化排除字段

fastjson 序列化排除字段

yin__ren的博客 2223

FPGA 上的 YOLOv8 实时目标检测:从模型优化到硬件加速全解析

本文全面解析了将YOLOv8目标检测模型部署到FPGA进行硬件加速的完整流程。通过模型裁剪、混合精度量化等优化手段,结合HLS设计专用计算引擎与数据流,实现了高能效比的实时推理。文章深入探讨了软硬协同部署、性能调试与优化技巧,为追求极致实时性与低功耗的边缘AI应用提供了从算法到硬件的实战指南。

weixin_29031161的博客 604

FastJson序列化时过滤字段(属性)的方法总结

  FastJson序列化时(即转成JSON字符串时),可以过滤掉部分字段,或者只保留部分字段,方法有很多,下面举一些常用的方法。 方法一、FastJson的注解 1 @JSONField(serialize = false) 2 private String name;   最便捷,直接在实体的字段上加FastJson的注解serialize = ...

dianluo4096的博客 2391

【强化学习的数学原理-赵世钰】课程笔记(一)基本概念

在B站上学习强化学习的课程笔记,笔记非常详细清晰,会持续更新

qq_64671439的博客 1万+

Python处理高光谱数据#3 降维

基于Python的高光谱降维操作 高光谱数据:点击此处可下载 用到的库:matplotlib、scipy、spectral 主要内容:主成分分析(PCA)与线性判别(LDA) 欢迎有兴趣的朋友交流指点。最后,废话不多说直接上代码???? import matplotlib.pyplot as plt from scipy.io import loadmat import spectral as spy

qq_273058791的博客 6936

fastJson 序列化忽略指定字段

【代码】fastJson 序列化忽略指定字段。

xyw10000 7541

计算机考研常见面试题

写在前面 本人参加20考研,由于复试没有具体要求会问哪几门课,所以我就找了网上一些常见的计算机专业的面试题,整理如下 主要结构: 数据库 软件工程 操作系统 计算机组成原理 计算机网络 数据结构 C++ Java 数据库 1、数据:数据库中存储的基本对象。 数据库:长期存储在计算机内的、有组织的、可共享的数据集合。 数据库管理系统:专门用于建立和管理数据库的一套软件。对外部程序提供访问数据库的方法,对内进行数据管理。 数据库系统:与和数据库相关的整个系统,一般由数据库、数据库管理系统、应用程序、数

qq_38841618的博客 2万+

什么是rmi?为什么要使用rmi框架?

大家好,我是IT修真院武汉分院第13期的学员石奥林,一枚正直纯洁善良的JAVA程序员。今天给大家分享一下,修真院官网JAVA任务8的知识点——Spring RMI   Java小课堂 1.背景介绍 2.知识剖析 3.常见问题 4.解决方案 5.编码实战 6.扩展思考 7.参考文献 8.更多讨论 1.背景介绍 RMI全称是Remote Method Invocation-远程...

qq_26892215的博客 1592

STM32F407最小系统硬件设计与CubeMX工程实践

嵌入式最小系统是MCU功能实现的物理基础,其核心涵盖供电网络、时钟架构、复位机制与调试接口四大模块。基于Cortex-M4内核的STM32F407对电源纹波、晶振稳定性及信号完整性提出严苛要求:模拟电源VDDA需<10mV纹波,HSE晶振布线须满足短距直连与匹配电容精准配置,SWD调试接口依赖50Ω阻抗控制与端接防护。这些硬件约束直接映射至STM32CubeMX配置——如RCC时钟树参数必须与实物晶振频率严格一致,GPIO模式需匹配外设电气特性(如I2C必选开漏),否则将引发通信失败或启动异常。典型应用场景

weixin_35592186的博客 173

通过傅里叶变换进行音频变声变调

在游戏或者一些特殊场景下为了提高娱乐性或者保护声音的特征,我们会对音频进行变声变调处理。

yang1fei2的博客 1815

如何在Spring框架中使用RMI技术

如何在Spring框架中使用RMI技术

gaohuanjie的专栏 5040

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

RPC框架-RMI

RMI(Remote Method Invocation)是Java语言中的一种RPC实现,它允许Java程序调用位于其他虚拟机中的Java对象上的方法。RMI的设计目标是通过对远程对象的调用,像处理本地对象一样处理远程对象,使分布式计算的复杂性对开发者透明化。远程对象:远程对象是一个可以通过网络进行调用的对象。它的类必须实现接口,并通过类导出。远程接口:远程对象实现的接口必须继承Remote接口,接口中的每个方法必须抛出。客户端与服务端:RMI框架将远程对象的调用划分为客户端和服务端两部分。

Flying_Fish_roe的博客 1419

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RMI 框架工作原理(附源码)

RMI 框架RMI 框架1.RMI框架出现的背景分布式对象模型2.RMI 基本原理客户端请求调用远程对象的方法RMI 框架采用代理来封装通信细节3.创建RMI 应用流程(文章最后有源码详解)问题思考参考文献源代码 RMI 框架 应用在分布式开发。 在RMI中,首先服务器端的某个类要 extends java.rmi.Romote ,然后在 RMI 注册器中注册远程对象,客户端通过代理访问 RMI 注册器,查询远程对象,最后才能调用服务器上的远程对象。 详细过程 HelloService 接口要 exte

buffedon的博客 1067

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

RMI框架解析一

RMI框架解析一在实际应用中,为了合理的分配软硬件资源,会把各个对象分布在不同的网络节点上,这些对象之间能相互发送消息。分布式对象模型的实现系统应该具备以下功能:1)    把分布在不同节点上的对象之间发送的消息转换为字节序列,这一过程称为编组(marshalling)。2)    通过套接字建立连接并且发送编组后的消息,即字节序列。3)    处理网络连接或传输消息时出现的各

liyangbing315的专栏 2929

【java】RPC与RMI框架

目录概述RMI框架注册MethodFactoryMethodDefinitionProxyAnntotation服务端RPCServerServerExecutorArgumentMaker配置文件客户端 概述 RPC(Remote Procedure Call Protocol)远程过程调用协议,通过网络从远程计算机上请求调用某种服务。它是一种通过网络从远程计算机程序上请求服务,而不需要了解底...

weixin_43148189的博客 848

【Java框架】RMI框架的一步步实现

RMI框架一步步实现 首先来写我们的RMI服务器这边的代码 import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class RMIServer implements Runnable { public static final int DEFAULT_PORT = 54189; private int port; private ServerSocket server;

weixin_45500506的博客 294

RMI框架解析二

RMI框架解析二远程方法中的参数与返回值的传递:当客户端调用服务器端的远程对象的方法时,客户端会向服务器端传递传递参数,服务器端则会根据客户端传递的返回值。RMI规范对参数以及返回值的传递作了以下规定:1). 只哟基本类型的数据、远程对象以及可序列化的对象才可以作为参数或返回值进行传递。如果参数或返回值是一个远程对象,那么把它的存根对象传递到接收方,也就是说,接收方得到的是远程

liyangbing315的专栏 1941

自定义 RPC框架4——RMI+Zookeeper实现RPC框架

准备工作 这次我们用RMI+Zookeeper实现一个远程调用的RPC框架,RMI实现远程调用,Zookeeper作为注册中心,具体的操作之前的文章都提到过,这里不再做过多赘述。 自定义 RPC框架2——RMI实现RPC https://blog.youkuaiyun.com/qq_45587153/article/details/124211478?spm=1001.2014.3001.5502 自定义 RPC框架3——JAVA实现Zookeeper节点增删改查 https://blog.youkuaiyun.com/qq_45

想飞的鱼的博客 1927

使用Java RMI 和zookeeper实现RPC框架

今天给大家带来一个实战操作,使用java自带的RMI和zookeeper来实现一个RPC框架。通过本文,你可以学习RMI和zookeeper的一些相关知识。 1 JAVA RMI 什么是JAVA RMI呢,我们知道RPC是远程过程调用,而RMI(Remote Method Invocation)远程方法调用,RMI 是从 JDK1.2 推出的功能,它可以实现在一个 Java 应用中可以像调用本地方法一样调用另一个服务器中 Java 应用(JVM)中的内容。听起来是不是很厉害,下面我们先来介绍一下JAVA R

wjf_jone的博客 421

RMI与RPC框架

RMI(Remote Method Invocation)远程方法调用与RPC(Remote Procedure Call Protocol)远程过程调用协议 文章目录RMI(Remote Method Invocation)远程方法调用与RPC(Remote Procedure Call Protocol)远程过程调用协议概述实现原理RMI框架注册 概述    &n...

三水木目的博客 1583

【Java】RPC与RMI框架

【Java】RPC与RMI框架 概念 RMI概念 RMI(Remote Method Invocation)远程方法调用是一种计算机之间利用远程对象互相调用实现双方通讯的一种通讯机制。使用这种机制,某一台计算机上的对象可以调用另外 一台计算机上的对象来获取远程数据。RMI是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。在过去,TCP/IP套接字通讯是远程通讯的主要手段,但此开发方式没有使用面向对 象的方式实现开发,在开发一个如此的通讯机制时往往令程序员感觉到乏味,

格局打开的博客 346
上一篇: JDBC连接池原理
下一篇: mybatis常用标签和动态查询
learning__java
博客等级 码龄8年 87粉丝 174原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值