1.
RMI和RPC之间最主要的区别在于方法是如何别调用的。在RMI中,远程接口使每个远程方法都具有方法签名。
如果一个方法在服务器上执行,但是没有相匹配的签名被添加到这个远程接口上,
那么这个新方法就不能被RMI客户方所调用。在RPC中,当一个请求到达RPC服务器时,
这个请求就包含了一个参数集和一个文本值,通常形成“classname.methodname”的形式。
这就向RPC服务器表明,被请求的方法在为“classname”的类中,名叫“methodname”。
然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入。
这里的参数类型是与RPC请求中的类型是匹配的。一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方。
2
昨天听了汪老师讲课,感觉不错,做个笔记先:
分布式对象如何构成
• 对象的状态由它的实例变量值组成
• 每个对象在逻辑上是分区的,可以物理地分布在不同的进程或计算机中
• 分布式对象系统可采用客户——服务器体系结构;对象由服务器管理,客户通过RMI调用对象的方法
分布式对象的优势
将客户和服务器对象分布在不同的进程中
• 提高封装性:对象的状态只能通过内部方法访问
• 提高数据安全性:对于并发的RMI可能访问同一个对象,可以通过条件变量或同步原语控制并发访问
• 有益于异构系统:异构系统在不同上下文中具有不同的数据格式,使用RMI的客户对于数据格式是透明的
分布式对象模型
• 远程对象引用:远程对象的在分布式系统中的唯一标识;如果某个对象可以访问远程对象的远程对象引用,那么它就能调用远程对象的方法
• 远程接口:可以被其他远程对象调用的方法集合,不在相同进程中的对象只能调用远程接口定义的方法;CORBA提供IDL定义远程接口,客户不需要为了能够远程调用其方法而使用与远程对相同的语言;Java RMI以与其它Java接口相同的方式定义远程接口;通过扩展Remote接口而获得远程接口的能力
RMI(Remote Method Invocation)
• RMI与本地方法调用存在不同,可能有多次调用
• RMI调用语义(取决于请求-应答协议的实现方式:重发请求消息、过滤重复请求、重传结果)
Ø 或许调用:出现网络故障或系统崩溃而没有容错措施或超时后没有重发请求,使得远程方法的执行情况不明确
Ø 至少一次调用:调用者或者得到执行结果,或者接收到异常信息,保证服务器执行过RMI,通过重发请求消息实现
(问题:只能解决网络故障,无法解决系统故障
多次请求可能引发存储错误或返回错误结果:幂等操作)
Ø 至多一次调用:通过容错和重发请求消息、过滤重复请求实现,CORBA、Java RMI都采用此调用语义
RMI的实现
• 通信模块
Ø 实现请求——应答协议,服务器端通信模块为被调用对象选择调度程序,传输其本地调用,该本地引用取自远程引用模块,用来替换请求消息中的远程对象标识符
• 远程引用模块
Ø 负责翻译本地和远程对象引用以及创建远程对象引用。通常维护一个远程对象表,记录进程的本地和远程对象引用的对应关系
Ø 表的内容:
• 该进程拥有的所有远程对象的表项
• 每个本地代理的表项
Ø 动作:
• 远程对象第一次作为参数或结果传递时,它创建一个远程对象引用并加入到表中
• 当引用对象随请求或应答到达时,它提供对应的本地对象引用,可能指向一个远程对象或一个代理
• 代理类
Ø 使远程方法调用对客户透明,它不执行调用,而是将调用放在消息里传递给远程对象,隐藏了远程对象引用的细节、参数的编码、结果的编码以及客户消息的发送和接收
Ø 代理类实现它所代表的远程对象的远程接口定义的方法
Ø 代理中的每个方法会把一个目标对象的引用,它自身的方法ID和它的参数编码进一个请求消息并发送到目标,等待应答消息,然后编码并将结果返回给调用者
• 调度程序类
Ø 接收来自通信模块的请求或应答信息,并传递消息到相应的代理或骨架
Ø 调度程序和代理对远程接口中的方法使用相同的方法ID
• 骨架类
Ø 远程对象具有的类,用于实现远程接口中的方法
Ø 骨架方法解码请求消息中的参数,并调用远程对象中的相应方法,等待调用的完成,然后将结果和任何异常信息编码进应答消息,发送给代理的方法
• 服务器程序和客户程序
Ø 服务器程序包含调度程序类、骨架类以及支持的所有远程对象类的实现,同时还包含一个初始化部分(负责创建和初始化至少一个包含在服务器上的远程对象),另外的远程对象可能应客户发出的请求而创建
Ø 客户程序通过代理类,用一个绑定程序查找远程对象引用。远程对象只能在初始化部分创建或通过专门的远程接口方法中创建(厂方法)
• 绑定程序
Ø 是一种独立的服务,它维护一张表,包含从文本名字倒远程对象引用的映射,服务器根据这张表按照名字注册它们的远程对象,客户根据这张表查找这些远程对象
• 服务器线程
Ø 为避免一个远程调用的执行延误另一个远程调用的执行,服务器一般为每个远程调用的执行分配一个独立的线程
• 远程对象的激活
Ø 避免服务进程长时间的活跃而造成资源浪费,采用激活方式,当客户需要服务时才启动
Ø 启动包含远程对象的服务器进程成为激活器
• 持久对象存储
Ø 在进程两次激活之间仍然保证存活的对象成为持久对象
Ø 通常由持久对象存储管理,在磁盘上以编码格式存储持久对象的状态
Ø 当需要调用持久对象时激活该对象,该对象从持久对象管理中退出
Ø 当不需要持久对象时,可以在主存中钝化该对象,在大多数情况下,为了容错和数据一致性,对象需要保存在持久对象存储中
• 对象定位/span>
Ø 通常可以通过远程对象的url及端口号保证其唯一性,但是对于在整个生命周期中需要迁移的远程对象,这种定义方式无法保证其唯一性
Ø 定位服务帮助客户根据远程对象引用定位远程对象,它使用一个数据库将远程对象引用映射成他们当前的大概位置。
Ø 对于没有移动的对象(保存在缓存中)可以尝试用该地址引用,对于已经移动的对象则需要广播一条请求,找到该对象
分享到:
相关推荐
Java RPC和RMI代码实战,有关键注释,为最简案例。Maven搭建,JDK8编译。 RPC体验:依次运行RpcProvider和RpcConsumer类。 RMI体验:RMITest中依次运行testServer和testClient方法。
分布式系统中的通信机制是系统能否高效、稳定运行的关键,其中最为人熟知的两种通信方式分别是远程过程调用(RPC)和远程方法调用(RMI)。本文将详细阐述这两种技术的工作机制及其在分布式系统中的应用。 分布式...
RMI与RPC的主要区别在于调用方法的方式。在RMI中,每个远程方法都有其方法签名,这意味着服务端的远程接口必须明确地声明所有可被调用的方法及其参数。如果服务器添加了一个新方法,但没有在远程接口中声明对应的...
RPC(Remote Procedure Call,远程过程调用)与RMI(Remote Method Invocation,远程方法调用)是两种在分布式系统中实现跨网络通信的关键技术。它们允许一个程序在不关心远程服务器具体实现的情况下,调用远程...
RPC(Remote Procedure Call)和RMI(Remote Method Invocation)是两种在分布式系统中实现跨网络对象调用的技术,常用于构建分布式应用。本示例程序是关于如何利用RPC和RMI来实现一个简单的加法运算,这对于理解这...
### RMI与RPC的区别 - **语言绑定**:RMI是Java特有的,而RPC可以跨多种编程语言。 - **接口定义**:RMI需要定义Java接口,而RPC通常涉及更通用的协议描述,如XML-RPC或gRPC。 - **序列化**:RMI使用Java的序列化...
【RMI与RPC概述】 RMI(Remote Method Invocation)远程方法调用是Java平台中用于实现分布式计算的一种机制。它允许客户端的Java对象调用位于远程服务器上的对象的方法,仿佛这些方法是在本地对象上调用一样。RMI的...
总结,"dubbo_rpc_hession_rmi"这个主题涵盖了Dubbo作为RPC框架的核心概念,Hessian作为RPC协议的实现,以及RPC基础理论。通过学习这些内容,开发者可以更好地理解和应用分布式服务框架,提高系统的可扩展性和可维护...
RMI(Remote Method Invocation)是Java平台上的另一种RPC实现,主要用于Java应用之间的通信。 本文主要讨论的是如何将Hessian RPC与RMI技术整合到Structs、Spring、Hibernate和Ibatis这四个关键的Java开发框架中,...
RPC与RMI的区别主要在于,RPC是一种更抽象的远程过程调用技术,而RMI是RPC在Java语言中的一种具体实现,专门为Java环境设计。RMI不仅传递参数和返回值,还能传输Java对象,而RPC通常基于文本消息传递,例如使用HTTP...
在IT领域,分布式通信是实现跨网络系统交互的关键技术之一,其中远程方法调用(RMI)和远程过程调用(RPC)是最为常见的两种机制。本文将深入探讨这两种技术的特点、工作原理以及它们之间的异同,以帮助程序员更好地...
文件"角色_ RPC_原理 _RMI.mp4"可能是一个视频教程,详细讲解了这些概念,包括如何设置和运行Dubbo示例,RPC的工作流程,以及RMI在其中的角色。通过观看这个视频,开发者可以获得更直观的理解,并能够将理论知识应用...
- RMI与RPC的主要区别在于RMI仅限于Java环境,而RPC则具有更好的跨平台兼容性。 - RMI在Java生态系统中更加高效便捷,而RPC则更适合需要多语言支持的场景。 #### Java RMI与JMS 1. **概念差异**: - **RMI**:...
- **与Sun RPC和DCERPC的区别**: - RMI不是语言/机器独立的。 - RMI支持类中的方法概念。 - RMI支持多态性。 #### 二、RMI的核心组件 在运行使用RMI的程序时,涉及三个主要实体: 1. **客户端(Client)**:这...
远程调用一般分为两种,远程过程调用(RPC)和远程方法调用(RMI)。 RPC RPC属于函数级别的远程调用,其多是通过HTTP传输数据,数据形式有XML、JSON、序列化数据等。在此,用python做一个xml-rpc的示例。 先给...
在本项目"RPC-code_rpc_"中,我们关注的是RPC的实现,特别是通过Thrift和RMI两种技术进行服务器间的交互。 **Thrift** 是Facebook开源的一种高性能、跨语言的服务交互框架。它的主要功能是生成跨语言的客户端和...
RMI的基础是远程过程调用(RPC),它允许一个进程调用另一个进程(可能在远程主机上)中的过程,从而实现了过程的分布能力。相比于传统的RPC,RMI进一步简化了分布式对象之间的通信机制,使得开发者能够更加专注于业务...
java运行依赖jar包