- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
分布式系统与中间件项目计划书
分布式系统与中间件项目计划书
PAGE1 / NUMPAGES9
分布式系统与中间件
项目计划书
Project 1
The design and implementation of RMI using Java
PAGE \* MERGEFORMAT 7
研究动机
远程方法调用(Remote Method Invocation,RMI)是用Java在JDK1.1中实现的,它大大增强了Java开发分布式应用的能力。Java作为一种风靡一时的网络开发语言,其巨大的威力就体现在它强大的开发分布式网络应用的能力上,而RMI就是开发百分之百纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP是专为Java的远程对象制定的协议。因此,Java RMI具有Java的“Write Once,Run Anywhere”的优点,是分布式应用系统的百分之百纯Java解决方案。用Java RMI开发的应用系统可以部署在任何支持JRE(Java Run Environment,Java运行环境)的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。
主要是通过这次实践,更加深入的理解JAVA RMI实现机制,并通过编写自己的RMI来加深理解。另外,实践过程中的种种问题可以帮助我们理解RMI需要解决的基本问题,以及该如何去解决这些问题。比如这次实践最主要要解决的marshal和communication问题。这其中数据结构的设计好坏体现出巨大的作用,关系到编程算法的难易度,也关系到功能方面。
不仅如此,理解了JAVA RMI实现机制以后,对于其它的分布式调用也就自然不在话下,很容易得到举一反三的效果。
还可以趁此机会回味一下JAVA,这个已经好久已经没有碰过的东西,似乎好多东西已经忘记了,幸亏有C和C++的基础在,对JAVA也没什么可畏惧的了。
现有方法的缺陷
RMI技术缺点主要表现在以下几个方面:?
??? 第一、RMI是与语言相绑定的。比如当你使用Java RMI技术的时候,客户端与服务器端都必须使用Java开发。
第二、从网络协议栈的观点来看,RMI在TCP协议之上,又定义了自己的应用协议,其传输层采用的是Java远程方法协议(JRMP)。可见,在网络协议栈上,基于RMI的应用位置更高一些,这也决定了RMI会丧失一些灵活性和可控性,但是好处是它带给了应用开发者更多的简洁,方便和易用。比如:如果你用的是RMI,你不需要关心消息是怎么序列化的,你只需要像本地方法调用一样,使用RMI。代价是应用开发者无法很好地控制消息的序列化机制。
第三、JAVA RMI效率低,但开发快。
研究问题
通过以下两点来深入理解基本的RMI机制,
在TCP之上设计一个你自己的RMI框架;
设计函数接口和原始数据类型,
主要讨论(i)marshal和unmarshal机制,(ii)通信机制。
初步思路
4.1 系统架构初步设计
Client
marshaling/unmarshalling
communication module
Server
marshaling/unmarshalling
communication module
socket
call
call
retrun
retrun
I/O stream
I/O stream
Registry module
rebind
lookup
stub return
4.2 系统对象初步设计
Client
Server
heap
heap
Proxy
Skeleton
Client对象
Server对象
Remote Func
Proxy
Remote Object Table
Proxy return
Socket communication
lookup( )
Remote func called
Local func called
4.3 粗略代码设计
Client
Server
0101010
10 110 1
0101010
10 110 1
MyRemoteClient.class
0101010
10 110 1
MyRemoteImpl_stub.class
MyRemote.class
0101010
10 110 1
0101010
10 110 1
Clien
文档评论(0)