分布式通信原理(5页).docx

上传人:1595****071 文档编号:68279324 上传时间:2022-12-27 格式:DOCX 页数:5 大小:133.21KB
返回 下载 相关 举报
分布式通信原理(5页).docx_第1页
第1页 / 共5页
分布式通信原理(5页).docx_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《分布式通信原理(5页).docx》由会员分享,可在线阅读,更多相关《分布式通信原理(5页).docx(5页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、-第 1 页分布式通信原理-第 2 页其实所谓的远程,并不是说跨机器、跨网络就是远程,只要是两个进程之间的调用,就算只要是两个进程之间的调用,就算是远程调用了是远程调用了也就是说只要是不在同一个也就是说只要是不在同一个 JVMJVM 里面里面(更准确的来说是不在同一个地址空间内更准确的来说是不在同一个地址空间内)的调用,它的调用,它就是远程调用就是远程调用也就是说如果我们在同一个机器上,启动两个进程,然后进行互相调用,那么这个过程就已经是远程调用了分布式通信的基本原理分布式通信的基本原理:主要是使用客户端上的 Stub(Stub(存根存根)和远程对象上的 Skeleton(Skeleton(骨

2、架骨架)作为中介,来实现分布式通信的,在客户端会有一个叫做 Stub(存根)的东西,其实现采用的是非常典型的代理模式,其实现采用的是非常典型的代理模式,是远程对象在客户端的代理是远程对象在客户端的代理Stub 会封装所交互的数据的访问细节(如何压缩、压包、编码等),然后通过相应的协议相应的协议与Skeleton(骨架)交换数据对于 Java 领域的分布式通信技术,较常见的有 EJB 技术、CORBA 技术、WebService 技术等等如果是 EJBEJB 技术,那么 Stub 就会采用 RMI-IIOPRMI-IIOP 协议协议来传送数据给 Skeleton如果是 CORBACORBA 技术

3、,那么 Stub 就会采用 IIOPIIOP 协议协议来传送数据给 Skeleton如果是 WebServicesWebServices 技术,那么 Stub 就会通过 SOAPSOAP 协议协议来传送数据给 Skeleton也就是说 Stub 会按照特定协议将信息传送给 Skeletion而 Skeleton 会将 Stub 传送过来的数据解析成特定的语言对象解析成特定的语言对象并发送给远程对象,即服务端比如说服务端是采用服务端是采用 JavaJava 开发的,那么开发的,那么 SkeletonSkeleton 就会将接收到的数据解析成就会将接收到的数据解析成 JavaJava 对象对象,再

4、传送给服务端再传送给服务端同理若服务端是采用 C#开发的,那么 Skeleton 就会将接收到的数据解析成 C#对象,再传送给服务端接着服务端就会返回信息给客户端,于是 Skeleton 就会将所要返回的信息进行压缩编码并通过相应的协议传送给 Stub接着 Stub 就会将 Skeleton 传送过来的信息解开,再传送给客户端,所以客户端就获得了相应的服务端的返回信息了这里的客户端对象和远程对象是位于不同的这里的客户端对象和远程对象是位于不同的 JVMJVM 中的,或者说是不同的系统平台中中的,或者说是不同的系统平台中,此即分布式通信分布式通信它主要就是靠 Stub 和 Skeleton 来通

5、讯,说白了,分布式通信也就是分布式通信也就是 StubStub 和和 SkeletonSkeleton 之之间的通信间的通信分布式通信的举例分布式通信的举例假设有两个服务器,本地的服务器采用的是本地的服务器采用的是 JavaJava 开发的开发的,远程的是一个采用远程的是一个采用 C#C#开发的天气开发的天气预报的服务器预报的服务器,二者可以通过以下几种方式通信1 1、如果二者不采用某些技术来通信的话,也是可以的比如远程服务器开放数据库表比如远程服务器开放数据库表,然后本地服务器使用使用 JDBCJDBC 访问访问这个开放的数据库表,也能够实现分布式通信只不过开放数据库表的做法,不太好。会暴露

6、表结构、安全性也不是特别好、并且也是不会暴露表结构、安全性也不是特别好、并且也是不标准的标准的另外有些数据,并不是单纯的一张表就能体现出来的,可能要通过一定的算法计算出来结可能要通过一定的算法计算出来结果的果的2 2、如果二者采用采用 WebServicesWebServices 通信的话,那么就是使用 SOAP 协议来交互数据,该数据就是采用 HTTP 协议传送 XML 文件-第 3 页但此时双方进行通信的过程中,由于采用的是由于采用的是 SOAPSOAP 协议协议,所以双方交换的数据是大文本所以双方交换的数据是大文本(通通常是常是 XMLXML 文件文件)文件文件这时就有一个问题:假设需要

7、请求 10000 条数据,那么所交换的这个大文本文件的体积,将会是非常大的,传送的过程就会很耗时有一个解决办法是:可以让可以让 JavaJava 通过它的通过它的 ZIPAPIZIPAPI 压缩该压缩该 XMLXML 文件文件,然后上传到然后上传到 FTPServeFTPServer r上上,服务端再下载这个压缩后的 XML 文件接着服务端再解压缩这个 XML 文件,然后读取,再进行相应的处理,这也是解决这也是解决 SOAPSOAP 协议协议传递大文本文件的速度特别慢的办法之一传递大文本文件的速度特别慢的办法之一3 3、可以令远程服务器把天气预报的数据,定时的上报到某一个定时的上报到某一个 F

8、TPServerFTPServer,然后客户端的Java 程序也定时的到 FTPServer 上取数据4 4、第三种方式的缺点是不实时第三种方式的缺点是不实时。我们也可以让客户端发送消息给远程的服务端让客户端发送消息给远程的服务端,服务端侦服务端侦听听,然后再发送消息返回给客户端5 5、二者采用纯粹的采用纯粹的 IIOP(IIOP(属于属于 CORBACORBA 技术架构技术架构)协议协议来通信6 6、如果远程服务器是采用 EJB 开发的,那么二者可以通过通过 RMI-IIOPRMI-IIOP 协议协议通信。而而 RMI-IIORMI-IIOP P协议采用的是二进制传输,效率会更快协议采用的是

9、二进制传输,效率会更快由于 EJBEJB 也应用了也应用了 CORBACORBA 的的 IIOPIIOP 协议协议,所以在异构系统整合的时候,CORBA 的互通性会比较好步骤大致是服务器端先把服务器端先把 EJBEJB 注射到注射到 JNDIJNDI 树上树上,然后客户端的然后客户端的 JavaJava 程序程序 lookuplookup 这个这个 JNDJNDI I树上对应的名字树上对应的名字,这样 EJB 就传过来了也就是说此时 Stub 就动态的传到客户端的 Java 程序中了,然后客户端就调用 Stub,接下来就是 Stub 和 Skeleton 打交道了另外 EJBEJB 只能使用只

10、能使用 JavaJava 来写,但是可以使用来写,但是可以使用 CORBACORBA 技术来调用技术来调用 EJBEJBEJBEJB 的前生的前生在 EJB1.X 的时候,对于分布式通信的服务的支持还很差比如写一个 EJB 的话,则至少要写三个类,然后编译,编译成编译成 StubStub 和和 SkeletonSkeleton,这时大约会编译出来 5、6 个类后来有所改善,最先改的就是最先改的就是 JBOSSJBOSS。开发 JBOSS 的 EJB 容器的这个人,他引入了引入了 JDKJDK 的动的动态代理来完成态代理来完成 StubStub 的自动生成的自动生成,所以 EJB 的开发就简单了

11、一些,只写三个类就可以了,存根会在运行时生成也就是在也就是在把把EJEJB B注射注射到到JNDJNDI I上之后上之后,我们就可以在另一我们就可以在另一个个JVJVM M里里面面lookulookup p这个这个 JNDIJNDI 的名字的名字,这样便得到了这样便得到了 EJBEJB 然后它就会序列化的把序列化的把 EJBEJB 传送到客户端传送到客户端,它传的就它传的就是是 StubStub,而它在,而它在 JVMJVM 内存里面是看不见的内存里面是看不见的,当我们在客户端调用相应方法的时候,其实在其实在内存里面调用的就是内存里面调用的就是 StubStub,然后,然后 StubStub

12、再与远端打交道再与远端打交道WebServicesWebServices解决异构系统之间的通信解决异构系统之间的通信从标准上来说,整个技术架构是整个技术架构是 WebServices(WebServices(带带 s s 的的),有时会看到很多人写成WebService(WebService(不带不带 s s 的的),其实这是不标准的,其实这是不标准的WebServiceWebService 指的是单独一个服务,而指的是单独一个服务,而 WebServicesWebServices 指的是它的技术架构指的是它的技术架构目前 WebServices 技术使用的稍多些,因为它走的是因为它走的是 H

13、TTPHTTP 协议协议,它可以穿越防火墙它可以穿越防火墙,它天它天生就能穿越生就能穿越 8080 端口端口但是 WebServicesWebServices 的缺点就是的缺点就是:慢慢!因为 WebServices 是基于 HTTP 协议传送大文本大文本,实际传送的是 XML 文件而 IIOP(IIOP(属于属于 CORBACORBA 技术架构技术架构)协议协议传送的就是二进制二进制,所以它的效率要比 WebServices 快很多-第 4 页所以在一些行业里,也大量的使用了 CORBA 技术,比如说电信网而而 CORBACORBA 的缺点就是:编程模型复杂,它是属于重量级的的缺点就是:编程

14、模型复杂,它是属于重量级的SOAPSOAP简单对象访问协议简单对象访问协议假设我们在本地通过Java写一个main()方法与远程的一个可以是用任何语言写的取得天气预报的服务打交道如果打交道的过程中采用的是采用的是 WebServicesWebServices 技术的话技术的话,那么它传送给远程的就是那么它传送给远程的就是 XMLXML 文件文件,使用的是使用的是 SOAPSOAP 协议协议SOAPSOAP 即简单对象访问协议即简单对象访问协议,其实质就是其实质就是 HTTP+XMLHTTP+XML,也就是说它是通过 HTTP 协议来传送 XML文件也就是说也就是说 SOAPSOAP 是基于是基

15、于 XMLXML 的简易协议,可以使应用程序在的简易协议,可以使应用程序在 HTTPHTTP 之上进行信息交换之上进行信息交换或者更简单地说或者更简单地说 SOAPSOAP 是用于访问网络服务的协议,而一条是用于访问网络服务的协议,而一条 SOAPSOAP 消息就是一个普通的消息就是一个普通的 XMXML L文档文档使用 SOAP 协议通信的过程中,远程对象会将所要返回的信息形成一个 XML 文件传给 Stub然后客户端就会把 XML 文件转换成 Java 对象,而当客户端在调用远程服务时客户端就会把 Java 对象转换成 XML 文件作为参数传给 Skeleton,而 Skeleton 就负

16、责把 XML文件转换成远程服务的相应语言的对象比如说服务端是采用服务端是采用 JavaJava 开发的,那么开发的,那么 SkeletonSkeleton 就会将接收到的数据解析成就会将接收到的数据解析成 JavaJava 对象对象,再传送给服务端同理若服务端是采用 C#开发的,那么 Skeleton 就会将接收到的数据解析成 C#对象,再传送给服务端所以,WebServices 能够实现异构语言的通信,可以用来整合异构系统同理,如果不是异构系统的话,也就没有必要使用如果不是异构系统的话,也就没有必要使用 WebServicesWebServices 技术技术比如说客户端和远程对象都是采用 J

17、ava 开发的,那么就没有必要使用 WebServices 了因为二者都是采用 Java 开发的,它们之间可以直接以二进制来传输数据,访问效率会快的很多而 WebServices 其实就是基于 XML 的数据交换,即 WebServices 所传送的是大文本,效率自然就慢了除非我们的系统是采用多语言开发的除非我们的系统是采用多语言开发的,那么就可以考虑使用 WebServices 技术或者说我们的系统想做的通用一些或者说我们的系统想做的通用一些,则可以采用并开放 WebServices 的一些方法其实其实 SOAPSOAP 就是用来最终完成就是用来最终完成 WebWeb 服务的调用的服务的调用

18、的,而而 WSDLWSDL 则用于描述如何使用则用于描述如何使用 SOAPSOAP 来调来调用用WebWeb 服务服务WSDLWSDLWebServicesWebServices 描述语言描述语言仍以上面为例,即客户端采用 Java 开发,服务端是采用 C#开发的天气预报的服务作为客户端,它知道在服务端提供了一个能够获取天气预报的服务,并且客户端也可以调用该服务但作为服务端,应该对这些服务进行描述,以告诉客户端都有哪些服务可供调用但作为服务端,应该对这些服务进行描述,以告诉客户端都有哪些服务可供调用而这个服务是不能用而这个服务是不能用 C#C#语言来描述的,因为采用语言来描述的,因为采用 Ja

19、vaJava 开发的客户端是无法识别的开发的客户端是无法识别的所以服务端就需要使用一套语言来描述它所提供的服务,这套语言就是 WSDL其实其实 WSDLWSDL 就是一个就是一个 XMLXML 文件文件,也就是说 WebServices 定义了一套标准,里面都是 XML 格式使用这套标准来描述服务端对外提供的服务,比如 C#的方法名、参数名、返回值等信息方法名、参数名、返回值等信息假设服务端的天气预报功能还没有使用 C#来实现,并且客户端也没有使用 Java 来实现这时突然要求定义一套标准来描述一下即将准备实现的服务端的天气预报的功能并且客户端可以任意调用这个天气预报功能,此时就可以写一套此时

20、就可以写一套 WSDLWSDL 来描述方法名来描述方法名、参数参数、-第 5 页返回值等信息返回值等信息。当服务端的当服务端的 C#C#得到该得到该 WSDLWSDL 时时,就可以通过就可以通过 WSDLWSDL 生成生成 C#C#代码代码,然后它就可以把取得天气预然后它就可以把取得天气预报功能的逻辑补充上报功能的逻辑补充上,而客户端的而客户端的 JavaJava 在得到这个在得到这个 WSDLWSDL 之后之后,同样可以生成同样可以生成 JavaJava 代码代码,然后把相应的约定的接然后把相应的约定的接口实现补充上口实现补充上。在使用在使用 WSDLWSDL 生成相应语言的代码的过程中,就需要用到一些引擎来实现生成相应语言的代码的过程中,就需要用到一些引擎来实现比如在 WebServices 中就有:AxisAxis、CXFCXF、XFireXFire 等框架,它们就可以根据 WSDL 解析成 Java代码,所以 WSDL 是一种中立的语言而 CORBACORBA 架构中也有类似于架构中也有类似于 WSDLWSDL 的一种东西的一种东西,叫做叫做 IDLIDL,它的语法类似于它的语法类似于 C+C+语言语言,但但 IDIDL L不是不是 C+C+

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 合同协议

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com