今天完成的事情:
学习RMI以及相关缺失的基础,进行查缺补漏
网上敲代码例子跑测试,不过没成功
明天计划的事情:
跑通例子,然后进行第二步
遇到的问题:
参照网上的教程,编译失败,然后cmd编译,除了接口以外,另外两个类编译失败,错误报在类名错误,找不到符号.明明设置了public
去网上查了怎么解决,说可能是编码的问题,然后重新设置了一遍idea和notepad++的编码,确认一致了也还是不行.有想过可能是机子配置的问题,把链接发给师兄看了,让他复制一份跑一下试试..
结果应该是例子的错误,浪费了大量时间纠结在这个例子上,因为看上去一套一套的感觉应该是正确的
换例子,惹不起惹不起
收获:
1:RMI
RMI:Remote Method Invocation即远程方法调用,它增强了java开发分布式应用的能力,可以理解为是java的一组拥护开发分布式应用程序的API
RMI的基础是接口,RMI构架基于一个重要的原理:定义接口和定义接口的具体实现是分开的
一个正常工作的RMI系统(远程方法调用)由下面几个部分组成:
1:远程服务的接口定义
2:远程服务接口的具体实现
3:Stub和Skeleton文件
4:一个运行远程服务的服务器
5:一个RMI命名服务,它允许客户端去发现这个远程服务
6:类文件的提供者(一个http或者ftp服务器)
7:一个需要这个远程服务的客户端程序
RMI接口要继承Remote,它是一个标识接口,用来标识可以被非本地虚拟机调用的接口
RMI的优点:
方便服务端与客户端之间进行对象形式的调用,而不单纯地只是调用字符串
而如果参数之间交互只是单纯地字符串,那么还不如http的纯post通信来得爽快
2:分布式
在看RMI的时候,很多次提到了分布式,什么是分布式,我是没什么概念的.然后去找资料来看
一般来说说到分布式,指的是分布式系统(distributed system).是指建立在网络之上的软件系统.正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性
(内聚性个人理解是类似于耦合的东西,不过它指的是一个模块内部各个元素之间的紧密程度,耦合是指模块之间的紧密程度)
(透明性这个取名看着不太舒服,我感觉不透明性更好,但不透明本身就是透明程度的一种,所以还是应该叫透明性,但是就是看着不舒服,嗯)
(透明性是指每一个数据库分部节点对用户的应用来说都是透明的,看不出是本地还是远程.用户感觉不到数据时分布的,用户不需知道关系是否分割,有无副本,数据存于哪个站点以及事务在哪个站点上执行等等)
什么是分布式系统呢?
分布式系统是若干独立计算机的组合,这些计算机对于用户来说就像是单个相关系统.
分布式的特点是什么?
向用户隐藏系统的内部组织结构,各个计算机之间的差别以及计算机之间的通信方式的差别都被隐藏掉.用户无论在何时何地都能够以一种一致的和统一的方式与分布式系统进行交互
分布式系统的关键目标:
1:使资源可访问
2:透明性,透明性有很多种,可以理解为分布式系统需要将它的进程和资源在多态计算机分布的事实隐藏起来
①访问透明性:对不同的数据表示形式以及资源访问方式的隐藏.
②位置透明性:用户无法判别资源在系统中的物理位置,这是通过命名来实现的
③迁移透明性:资源的移动不会影响该资源的访问方式
④重定位透明性:资源在接收访问的同时进行重定位,而不引起用户和应用程序的注意
⑤复制透明性:对同一个资源存在多个副本这样一个事实的隐藏
⑥并发透明性:访问共享资源的时候,让任何一个用户都不会感觉到他人也在使用自己正使用的资源
⑦故障透明性:用户不会注意到某个资源无法正常工作,以及系统随后从故障中恢复的过程
3:开放性.
4:可拓展性:
3:重定位
在看分布式系统的透明性时,看到重定位,说实话这个东西我看过很多次了,一直没抽空去了解,这次就去看了一下资料
重定位分两种,一种静态一种动态,重定位就是把程序的逻辑地址空间变换成内存中的实际物理地址空间的过程,也就是说在装入时对目标程序中指令和数据的修改过程.是实现多道程序在内存中同时运行的基础
看到这介绍,我是不是还要去查逻辑地址空间和实际物理地址空间,哇,这是啥?这又是啥?
(逻辑地址空间:指一个源程序在编译或者连接装配后指令和数据所用的所有相对路径的空间)
(实际物理地址空间:这个网上说的不够明白,不管了,大概知道有这东西得了)
静态重定位:即在程序装入内存的过程中完成,是指在程序开始运行前,程序中的各个地址有关的均项已完成重定位,地址变换通常是在装入时一次完成的,以后不再改变,故称为静态重定位
(个人理解有点像那什么,静态方法还是什么的,在生成的时候,里面的东西就已经搞完了)
动态重定位:它不是在程序装入内存时完成的,而是CPU每次访问内存时,由动态地址变换机构(硬件)自动进行把相对地址转换为绝对地址.动态重定位需要软件和硬件相互配合完成
还有一些关于重定位的理解:
1:重定位是由操作系统安排的
2:在装入程序前,系统会计算未使用的内存,然后将程序装入,并记下开始地址.在执行有相对地址的指令时,会将所有的地址加上刚才记下的开始地址,就叫重定位
3:重定位与EXE文件无关,它是程序装入时的一种方式,利用重定位可提高内存空间的使用率(好处)
4:RMI与RPC
RPC:远程过程调用
远程过程调用是被设计用来在应用程序通信的平台中立的方式,它不会理会操作系统之间与语言之间的差异,即RPC支持多种语言
RMI:远程方法调用
RMI只支持java写的应用程序
RMI与RPC之间最主要的区别在于方法是如何被调用的
RMI中,远程接口使每个远程方法都具有方法签名.如果一个方法在服务器上执行,但是没有匹配的签名被添加到这个远程接口上,那么这个新方法就不能被RMI客户方所调用
RPC中,当一个请求到达RPC服务器时,这个请求就包含了一个参数集和一个文本值,通常形成"classname.methodmname"的形式.这就向RPC服务器表明,被请求的方法在为"classname"的类中,名为"methodname".然后RPC服务器就去搜索与之相匹配的类和方法,并把它作为那种方法参数类型的输入.这里的参数类型是与RPC请求中的类型是匹配的.一旦匹配成功,这个方法就被调用了,其结果被编码后返回客户方
评论