一种可减少传输流量的远程调用方法

文档序号:9633824阅读:534来源:国知局
一种可减少传输流量的远程调用方法
【技术领域】
[0001]本发明属于网络通信领域,尤其是方法调用过程中减少流量的处理方法,具体地说是一种可减少传输流量的远程调用方法。
[0002]
【背景技术】
[0003]目前,Java RMI (远程方法调用Remote Method Invocat1n),是一种机制,能够让在某个Java虚拟机上的对象调用另一个Java虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
[0004]Client通过控制链连接到Server后,得到RMI对象信息[IP, PORT, Objld],通过数据链连接此[IP:Port],发送请求并获取ObjID对应的对象的响应。
[0005]所有RMI中的数据传输,需要进行对象的序列化,传递到服务器端,服务器端通过反序列化能到原始的对象信息。
[0006]RMI在client端和server端进行数据传输的时候,需要将参数进行序列化,然后在网络传输,这块序列化流的大小,直接影响client和server端的交互速度。

【发明内容】

[0007]本发明的目的是针对方法调用过程中流量占用多的问题,提出一种可减少传输流量的远程调用方法。
[0008]本发明的技术方案是:
一种可减少传输流量的远程调用方法,客户端Client通过控制链连接到服务器端Server后,得到RMI对象信息,对RMI对象信息进行省流量的序列化,传递到服务器端,服务器端通过反序列化能到原始的对象信息,完成远程调用。
[0009]本发明具体包括以下步骤:
(1)、客户端通过IP和端口向RMI服务器端发出服务请求;
(2)、RMI服务器端接收到客户端的请求后,返回服务器端的IP,数据传输端口和服务器端的对象ID ;
(3)、客户端收到服务端返回的IP,数据传输端口和对象ID之后,会在客户端本地生成一个RMI的本地代理对象即本地存根Stub ;
(4)、RMI客户端通过本地代理对象往服务器端的RMI发起对应的请求指令,同时会把对应的方法参数,方法名称传入本地代理对象;
(5)、本地代理对象Stub通过反射机制,调用invoke方法,获取请求对象的方法参数+方法名称;
(6)、本地代理对象Stub获取到相应对象的方法参数之后,首先会获取和远程服务端连接的通道ChannelConnect1n,然后获取这个连接通道的对象输出流;
(7)、获取到对象输出流之后,本地代理对象调用JDK的序列化对象方法,将之前获取到的对象的方法参数序列化成流写进第六步获取到的对象输出流中;
(8)、客户端将步骤(7)中对象输出流的信息发送到服务器端,服务器接收到请求之后,首先通过JDK的反序列化,将流反序列化成对应的请求方法参数,然后服务器端调用对应的请求方法进行业务处理;
(9)、服务器端方法业务处理结束之后,将结果通过JDK序列化成流,返回给RMI客户端,客户端再次通过反序列化,将流读成对应的结果,然后释放连接,完成了一次远程方法调用步骤。
[0010]本发明的有益效果:
RMI在client端和server端进行数据传输的时候,需要将参数进行序列化,然后在网络传输,这块序列化流的大小,直接影响client和server端的交互速度,传统处理序列化流的时候,RMI除了将对象的方法参数进行序列化,还会将该对象所在项目的工程信息返回,这些信息包括了本地的classpath,本地的jar包路径等等信息,这些信息都是客户端本地路径的信息,这些信息对于我们的业务毫无用处,但是序列化完之后,却占据了大量的带宽。本发明方法通过减小序列化流的大小,不携带对象所在项目的工程信息,从而减少网络带宽的使用,使得client和server端的交互速度提升数倍。另外,任何使用RMI方法的地方,无需在方法层做任何修改,即可达到减少流量的目的。
【附图说明】
[0011]图1是本发明的结构示意图。
【具体实施方式】
[0012]下面结合附图和实施例对本发明作进一步的说明。
[0013]如图1所示,一种可减少传输流量的远程调用方法,客户端Client通过控制链连接到服务器端Server后,得到RMI对象信息,对RMI对象信息进行省流量的序列化,传递到服务器端,服务器端通过反序列化能到原始的对象信息,完成远程调用。本发明具体包括以下步骤:
(1)、客户端通过IP和端口向RMI服务器端发出服务请求;
(2)、RMI服务器端接收到客户端的请求后,返回服务器端的IP,数据传输端口和服务器端的对象ID ;
(3)、客户端收到服务端返回的IP,数据传输端口和对象ID之后,会在客户端本地生成一个RMI的本地代理对象即本地存根Stub ;
(4)、RMI客户端通过本地代理对象往服务器端的RMI发起对应的请求指令,同时会把对应的方法参数,方法名称传入本地代理对象;
(5)、本地代理对象Stub通过反射机制,调用invoke方法,获取请求对象的方法参数+方法名称;
(6)、本地代理对象Stub获取到相应对象的方法参数之后,首先会获取和远程服务端连接的通道ChannelConnect1n,然后获取这个连接通道的对象输出流;
(7)、获取到对象输出流之后,本地代理对象调用JDK的序列化对象方法,将之前获取到的对象的方法参数序列化成流写进第六步获取到的对象输出流中; (8)、客户端将步骤(7)中对象输出流的信息发送到服务器端,服务器接收到请求之后,首先通过JDK的反序列化,将流反序列化成对应的请求方法参数,然后服务器端调用对应的请求方法进行业务处理;
(9)、服务器端方法业务处理结束之后,将结果通过JDK序列化成流,返回给RMI客户端,客户端再次通过反序列化,将流读成对应的结果,然后释放连接,完成了一次远程方法调用步骤。
[0014]具体实施时:
在图1所示的RMI通信过程中,修改第3步序列化请求参数,原先的参数包含方法参数和对象所在项目的工程信息两个部分。通过网络抓包抓取的client和server数据传输的网络包分析发现,开始几行是正常的对象序列化信息,还有主机ip。后面大部分都是客户端本地项目的一些jar包、本地的classpath的信息,这些信息占据的整个数据流的80%左右,由于是client本地路径信息,对于server端来说,毫无用处,如果能够去除这些,那么带宽使用情况将大幅度的缩小。
[0015]因此,去除掉占80%大小的classPath序列化流,整个序列化参数流大小将缩小4-5 倍。
[0016]本发明未涉及部分均与现有技术相同或可采用现有技术加以实现。
【主权项】
1.一种可减少传输流量的远程调用方法,其特征是客户端Client通过控制链连接到服务器端Server后,得到RMI对象信息,对RMI对象信息进行省流量的序列化,传递到服务器端,服务器端通过反序列化能到原始的对象信息,完成远程调用。2.根据权利要求1所述的可减少传输流量的远程调用方法,其特征是它具体包括以下步骤: (1)、客户端通过IP和端口向RMI服务器端发出服务请求; (2)、RMI服务器端接收到客户端的请求后,返回服务器端的IP,数据传输端口和服务器端的对象ID ; (3)、客户端收到服务端返回的IP,数据传输端口和对象ID之后,会在客户端本地生成一个RMI的本地代理对象即本地存根Stub ; (4)、RMI客户端通过本地代理对象往服务器端的RMI发起对应的请求指令,同时会把对应的方法参数,方法名称传入本地代理对象; (5)、本地代理对象Stub通过反射机制,调用invoke方法,获取请求对象的方法参数+方法名称; (6)、本地代理对象Stub获取到相应对象的方法参数之后,首先会获取和远程服务端连接的通道ChannelConnect1n,然后获取这个连接通道的对象输出流; (7)、获取到对象输出流之后,本地代理对象调用JDK的序列化对象方法,将之前获取到的对象的方法参数序列化成流写进第六步获取到的对象输出流中; (8)、客户端将步骤(7)中对象输出流的信息发送到服务器端,服务器接收到请求之后,首先通过JDK的反序列化,将流反序列化成对应的请求方法参数,然后服务器端调用对应的请求方法进行业务处理; (9)、服务器端方法业务处理结束之后,将结果通过JDK序列化成流,返回给RMI客户端,客户端再次通过反序列化,将流读成对应的结果,然后释放连接,完成了 一次远程方法调用步骤。
【专利摘要】一种可减少传输流量的远程调用方法,客户端Client通过控制链连接到服务器端Server后,得到RMI对象信息,对RMI对象信息进行省流量的序列化,传递到服务器端,服务器端通过反序列化能到原始的对象信息,完成远程调用。本发明的方法通过减小序列化流的大小,不携带对象所在项目的工程信息,从而减少网络带宽的使用,使得client和server端的交互速度提升数倍。另外,任何使用RMI方法的地方,无需在方法层做任何修改,即可达到减少流量的目的。
【IPC分类】H04L29/08, G06F9/54
【公开号】CN105391804
【申请号】CN201510942214
【发明人】张佳斌, 裔韩诚, 赵家智, 付志鹏, 陈杰, 唐勇
【申请人】炫彩互动网络科技有限公司
【公开日】2016年3月9日
【申请日】2015年12月16日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1