远程方法调用的实现方案研究.pdf

远程方法调用的实现方案研究.pdf

ID:52392448

大小:1.52 MB

页数:3页

时间:2020-03-27

远程方法调用的实现方案研究.pdf_第1页
远程方法调用的实现方案研究.pdf_第2页
远程方法调用的实现方案研究.pdf_第3页
资源描述:

《远程方法调用的实现方案研究.pdf》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、氇木梢·应璜技术与研究远程方法调用的实现方案研究赖歆(福富软件,福建福州350003)[摘要]针对分布式系统需要通过网络来表达调用的语义和传达调用的数据而会遇到的问题,本文对此问题展开探讨,首先对跨机间的远程调用进行分析,其次从通讯、编码解码进行研究,最后了提出具体的解决方案。[关键词]远程方法;通讯;序列化中图分类号:TP311.52文献标识码:A文章编号:1008.6609(2016)11.0068.031引言分布式系统并不像单机系统可以直接通过本地调用,其基本上由大大小小的服务组成,并且各种服

2、务通常会被部署在不同的机器上。由于各种服务不在同一个内存空间,因此不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。这时就会遇到两个问题:(I)要搭建一个新服务,需要依赖远程的服务,如何才能调用远程服务?(2)远程访问如何才能满足高效的性能要求?下文我们将对这两个问题展开探讨。2实现远程服务调用由于各服务部署在不同机器,服务消费方调用一个服务就要编写一堆网络通信相关的代码,不仅复杂而且极易出错。我们需要一种能像调用本地服务一样调用远程服务的方式,让网络通信中的细节对调用者透明,这样将大大简

3、化工作,提高编码效率,这种方式就是RPC(RemoteProcedureCallProtoc01)。RPC调用的流程如图l所示:3_________。。。。。。_●__-。。‘一........................一iliad8阐络服务端图1RPC调用流程图RPC的目标是将这些步骤都封装起来,让整体的过程细节对使用者变得透明。2.1实现透明化远程服务调用通过JAVA的动态代理技术封装通信细节,让用户以类似本地调用的方式调用远程服务。代理类通过调用被代理类的相关方法,提供预处理、过滤、事后

4、处理等服务,可以使用JDK中的java.1ang.reflect.Proxy类来实现动态代理。下面简单介绍用动态代理进行封装的示例。调用者先从RPCProxyClient获得服务提供方的接口,当执行helloServ.hello()方法时会调用Invoke方法,在代理类的Invoke方法中封装与远端服务通信的细节。严+定义接口并实现方法,它存在于远端+/publicinterfaceIHello{voidhello();)publicclassHelloimplementsIHello{@Overr

5、idepublicStringhello(){System.out.println(”Hello.");return”Hello.";)严+通过动态代理封装屏蔽通信细节+/publicclassRPCProxyClientimplementsjava.1ang.reflect.InvocationHandler{privateObjectobj;publicRPCProxyClient(Objectobj){作者简介:赖歆(1979-),男,福建人,系统架构工程师,研究方向为电信信息化。.68._圈

6、罴酬唧酗瞎木探讨·应用技术与研究this.obj=obj;}publicstaticObjectgetProxy(Objectobj){returnjava.1ang.reflect.Proxy.newProxylnstance(obj.getClass0.getClassLoader0,obj.getClass0.getInterfaces0,newRPCProxy-Client(obj));)publicObjectinvoke(Objectproxy,Methodmethod,Object[]

7、args)throwsThrowable{//结果参数;Objectresult2newObject();//⋯实现远程间通信的相关逻辑lt⋯returnresult;)}产+调用示例t/publicclassTest{publicstaticvoidmain(String[]args){IHeUohelloServ=(hello)RPCProxyClient.getProxy(IHello.class);helloServ.hell00;}2.2实现消息的编码解码在Invoke对通信细节进行封装,

8、第一步要确定客户端和服务端相互通信的消息结构。一般需要包括几个主要的信息:(1)接口名称:用于服务端确定调用哪个接121,如上面例子里接口名是“mello”。(2)方法名:用于服务端确定调用哪个方法(一个接口内可以有多个方法),上面例子里是“hello”。(3)参数类型&参数值。(4)唯一请求标识:远程调用可能是同步的,也可能是异步的,当设计工作在异步方式时,需要唯一请求标识来明确具体的事务。(5)返回值。确定了消息的数据结构后,下一步要考虑序列化与反序列化,以便于将

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。