远程过程调用方法及装置与流程

文档序号:11154688阅读:266来源:国知局
远程过程调用方法及装置与制造工艺

本发明涉及远程过程调用技术领域,特别是涉及远程过程调用方法及装置。



背景技术:

远程过程调用协议(RPC,Remote Procedure Call Protocol)是一种通过网络从远程计算机程序上请求服务的协议,它采用客户端设备/服务端设备模式,请求服务的一方为客户端设备,提供服务的一方为服务端设备。

为了支持不同语言平台,技术人员研发了Thrift。它解决了系统间大数据量的传输通信,以及系统之间语言环境的差异,具有跨平台的特性。但是,Thrift接口规范需要统一定义接口描述语言(IDL,Interface description language)文件。一旦接口发生变化,就需要重新修改IDC文件。

大型系统在开发和设计过程中存在大量对接过程,接口修改的频率非常高,因此使用Thrift进行远程过程调用时较为繁琐。



技术实现要素:

本发明实施例的目的在于提供一种远程过程调用方法及装置,以实现简化RPC调用过程。具体技术方案如下:

一种远程过程调用方法,应用于服务端设备,所述服务端设备与客户端设备通信连接,所述方法包括:

接收所述客户端设备发送的远程过程调用协议RPC请求;

根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;

确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。

可选的,所述方法还包括:

对线程执行所述消息生产队列中的消息的执行结果进行监控;

判断所述执行结果是否满足预设的触发条件,如果是,则触发与所满足的触发条件匹配的事件。

可选的,所述预设的RPC协议为:

所述RPC请求的格式为:包长、头大小、请求方法签名、消息类型、序列编号SEQID、扩展数据长度、编码后的扩展数据内容、body主体内容长度、body主体数据。

可选的,在所述接收所述客户端设备发送的远程过程调用协议RPC请求前,所述方法还包括:

所述服务端设备对所述客户端设备的连接请求进行监听;

在监听到所述客户端设备的连接请求后,与所述客户端设备建立链接。

可选的,所述方法还包括:

所述服务端设备对与客户端设备的链接状态进行监控;

在所述服务端设备与客户端设备的链接断开时,重新建立与该客户端设备的链接。

可选的,所述确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,包括:

在所述服务端设备本地查找具有得到的所述标识信息的键key,根据与所述key对应的值value中存储的方法参数生成与该方法对应的消息,将生成的消息放入消息生产队列中;

其中,在生成写消息时,将生成的写消息放入写消息生产队列中;

在生成读消息时,将生成的读消息放入读消息生产队列中。

可选的,所述从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备,包括:

从所述写消息消费者线程池中获取线程执行所述写消息生产队列中的写消息,在执行所述写消息成功后,将执行结果反馈至所述客户端设备,其中,在线程执行完所述写消息后,所述服务端设备将该线程放回所述写消息消费者线程池;

从所述读消息消费者线程池中获取线程执行所述读消息生产队列中的读消息,在执行所述读消息成功后,将执行结果反馈至所述客户端设备,其中,在线程执行完所述读消息后,所述服务端设备将该线程放回所述读消息消费者线程池。

可选的,在所述服务端设备对所述客户端设备的连接请求进行监听之前,所述方法还包括:

绑定对所述客户端设备的连接请求进行监听的监听地址TServerSocket,注册与所述客户端设备进行连接的接口方法存根RpcProxyProcessor;

启动IO线程,创建选择器Selector,将通道ServerSocketChannel注册到Selector以监听客户端设备的连接请求,Selector轮询就绪的Selector key,其中,所述Selector key为客户端设备连接服器端设备时注册到通道ServerSocketChannel中的事件的对象标识;

所述在监听到所述客户端设备的连接请求后,与所述客户端设备建立链接,包括:

在从所述监听地址TServerSocket监听到所述客户端设备的连接请求后,由AcceptImpl设置与发送该连接请求的客户端设备进行连接的参数并根据设置的参数与发送该连接请求的客户端设备建立链接;

所述确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,包括:

由所述Selector确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中。

一种远程过程调用装置,应用于服务端设备,所述服务端设备与客户端设备通信连接,所述装置包括:请求接收单元、请求解析单元、方法执行单元和消息执行单元;

所述请求接收单元,用于接收所述客户端设备发送的远程过程调用协议RPC请求;

所述请求解析单元,用于根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;

所述方法执行单元,用于确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

所述消息执行单元,用于从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。

可选的,所述预设的RPC协议为:

所述RPC请求的格式为:包长、头大小、请求方法签名、消息类型、序列编号SEQID、扩展数据长度、编码后的扩展数据内容、body主体内容长度、body主体数据。

本发明实施例提供的远程过程调用方法及装置,可以接收所述客户端设备发送的远程过程调用协议RPC请求;根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。本发明可以通过RPC请求中的请求调用的方法的标识信息来执行该方法,因此无需生成IDL文件,简化了RPC调用过程。

当然,实施本发明的任一产品或方法必不一定需要同时达到以上所述的所有优点。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种远程过程调用方法的流程图;

图2为本发明实施例提供的另一种远程过程调用方法的流程图;

图3为本发明实施例提供的一种远程过程调用装置的结构示意图;

图4为本发明实施例提供的另一种远程过程调用装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

如图1所示,本发明实施例提供的一种远程过程调用方法,应用于服务端设备,所述服务端设备与客户端设备通信连接,该方法可以包括:

S100、接收所述客户端设备发送的远程过程调用协议RPC请求;

其中,在步骤S100前,所述方法还可以包括:

所述服务端设备对所述客户端设备的连接请求进行监听;

在监听到所述客户端设备的连接请求后,与所述客户端设备建立链接。

具体的,可以由acceptImpl根据客户端设备的连接请求设置与客户端设备进行连接的参数以与客户端设备建立链接。

进一步,为了保持与客户端设备的链接保持稳定,本发明还可以包括:

所述服务端设备对与客户端设备的链接状态进行监控;

在所述服务端设备与客户端设备的链接断开时,重新建立与该客户端设备的链接。

由于服务端设备对与客户端设备的链接状态进行监控,因此在所述服务端设备与客户端设备的链接断开时,就可以及时重新建立与该客户端设备的链接以完成相应工作,提高了工作效率。

在本发明其他实施例中,服务端设备可以定期对与各客户端设备的所有链接进行扫描,根据链接数量进行相应处理。例如:设定最小链接数量及最大链接数量,当当前链接数量大于最大链接数量时,将当前链接中没有使用的链接回收,以减小当前链接数量,节省因过多链接数量带来的系统开销。

本发明同时适用于Java.NIO和标准IO,其中,Java.NIO和标准IO采用相同的TServer,Java.NIO根据服务端设备的CPU核数,启动固定个数的线程处理Java.NIO事件,标准IO可以根据实际情况设定最小线程数和最大线程数处理标准IO事件。

S200、根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;

其中,方法的标识信息可以为:请求方法签名。

所述预设的RPC协议可以为:

所述RPC请求的格式为:包长、头大小、请求方法签名、消息类型、序列编号SEQID、扩展数据长度、编码后的扩展数据内容、body主体内容长度、body主体数据。

其中,在RPC请求的包头的TMessage.name里面存储KEY=VALUE形式的头部数据。包头中包含请求方法签名、消息类型、序列编号SEQID、扩展数据长度和编码后的扩展数据内容;其中,请求方法签名由请求的方法的名称和参数列表构成。SEQID用于标识不同的RPC请求,编码后的扩展数据内容用于保存请求及响应内容。消息类型是远程方法调用的类型,包括四种类型:CALL(业务调用)、EXCEPTION(异常处理)、REPLY(请求响应)和ONEWAY(扩展使用)。扩展数据主要用于除了业务数据外其它的数据传输和方法调用,也可以作为方法回调的用途。

S300、确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

具体的,由于服务端设备可以通过与多个客户端设备通信连接,因此服务端设备常需要处理多个并发的RPC请求,这种情况下,可以通过上述消息生产队列的方式处理并发的RPC请求。

其中,步骤S300可以具体包括:

在所述服务端设备本地查找具有得到的所述标识信息的键key,根据与所述key对应的值value中存储的方法参数生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

其中,在生成写消息时,将生成的写消息放入写消息生产队列中;

在生成读消息时,将生成的读消息放入读消息生产队列中。

服务端设备可以读取需要对外提供服务的类,对外服务的接口通过注解的形式进行声明,由统一的Sign方法进行注册,以key-value形式保存到服务端设备内存当中,其中key即注解实例名称,value值存储实际的类方法和参数列表,当服务端接收到服务调用请求时,从key中识别指定服务,并实现调用。其中,注解可以标识方法可被用于远程调用,没有注解的方法无法被远程调用。

S400、从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。

具体的,可以使用java的线程池去管理并发的连接、异步处理连接和远程调用请求。

其中,步骤S400可以包括:

从所述写消息消费者线程池中获取线程执行所述写消息生产队列中的写消息,在执行所述写消息成功后,将执行结果反馈至所述客户端设备,其中,在线程执行完所述写消息后,所述服务端设备将该线程放回所述写消息消费者线程池;

从所述读消息消费者线程池中获取线程执行所述读消息生产队列中的读消息,在执行所述读消息成功后,将执行结果反馈至所述客户端设备,其中,在线程执行完所述读消息后,所述服务端设备将该线程放回所述读消息消费者线程池。

通过单独的读消息生产队列及写消息生产队列,就使得进行读及进行写的线程分离。

可选的,如图2所示,本发明实施例提供的另一种远程过程调用方法,还可以包括:

S500、对线程执行所述消息生产队列中的消息的执行结果进行监控;

S600、判断所述执行结果是否满足预设的触发条件,如果是,则执行步骤S700;

S700、触发与所满足的触发条件匹配的事件。

具体的,本发明可以采用Java.NIO的selector选择器模型进行事件注册。

具体的,在本发明其他实施例中,在所述服务端设备对所述客户端设备的连接请求进行监听之前,所述方法还可以包括:

绑定对所述客户端设备的连接请求进行监听的监听地址TServerSocket,注册与所述客户端设备进行连接的接口方法存根RpcProxyProcessor;

启动IO线程,创建选择器Selector,将ServerSocketChannel注册到Selector以监听客户端设备的连接请求,Selector轮询就绪的Selector key,其中,所述Selector key为客户端设备连接服器端设备时注册到通道ServerSocketChannel中的事件的对象标识。

具体的,解析RPC请求后,可以异步写ByteBuffer到ServerSocketChannel。

其中,ServerSocketChannel是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样。

在这种情况下,步骤S100可以包括:

在从所述监听地址TServerSocket监听到所述客户端设备的连接请求后,由AcceptImpl设置与发送该连接请求的客户端设备进行连接的参数并根据设置的参数与发送该连接请求的客户端设备建立链接;

步骤S300可以包括:

由所述Selector确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

其中,TServerSocket主要作为服务器端的套接字管理器使用。它封装了服务端设备的套接字。在打开套接字后,服务端设备就处于监听状态,在接收到其它机器的连接请求后,与客户端设备建立链接,创建一个新的套接字,用于和客户端设备互传数据,此时TServerSocket组件则继续监听客户端设备的连接请求。

本发明实施例提供的远程过程调用方法,可以接收所述客户端设备发送的远程过程调用协议RPC请求;根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。本发明可以通过RPC请求中的请求调用的方法的标识信息来执行该方法,因此无需生成IDL文件,简化了RPC调用过程。本发明不需要修改客户端设备对所要调用的方法的定义,客户端设备只需要通过方法的标识信息就可以实现方法的调用,简单易用。

与上述本发明实施例提供的方法相对应,本发明实施例还提供了远程过程调用装置。

如图3所示,本发明实施例提供的一种远程过程调用装置,应用于服务端设备,所述服务端设备与客户端设备通信连接,该装置可以包括:请求接收单元100、请求解析单元200、方法执行单元300和消息执行单元400;

所述请求接收单元100,用于接收所述客户端设备发送的远程过程调用协议RPC请求;

所述请求解析单元200,用于根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;

所述方法执行单元300,用于确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

所述消息执行单元400,用于从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。

其中,所述装置还可以包括:请求监听单元和链接建立单元,

所述请求监听单元,用于在所述请求接收单元100接收所述客户端设备发送的远程过程调用协议RPC请求前,对所述客户端设备的连接请求进行监听;

所述链接建立单元,用于在监听到所述客户端设备的连接请求后,与所述客户端设备建立链接。

具体的,可以由acceptImpl根据客户端设备的连接请求设置与客户端设备进行连接的参数以与客户端设备建立链接。

进一步,为了保持与客户端设备的链接保持稳定,本发明还可以包括:链接监控单元和链接重建单元,

所述链接监控单元,用于对与客户端设备的链接状态进行监控;

所述链接重建单元,用于在所述服务端设备与客户端设备的链接断开时,重新建立与该客户端设备的链接。

由于服务端设备对与客户端设备的链接状态进行监控,因此在所述服务端设备与客户端设备的链接断开时,就可以及时重新建立与该客户端设备的链接以完成相应工作,提高了工作效率。

在本发明其他实施例中,服务端设备可以定期对与各客户端设备的所有链接进行扫描,根据链接数量进行相应处理。例如:设定最小链接数量及最大链接数量,当当前链接数量大于最大链接数量时,将当前链接中没有使用的链接回收,以减小当前链接数量,节省因过多链接数量带来的系统开销。

本发明同时适用于Java.NIO和标准IO,其中,Java.NIO和标准IO采用相同的TServer,Java.NIO根据服务端设备的CPU核数,启动固定个数的线程处理Java.NIO事件,标准IO可以根据实际情况设定最小线程数和最大线程数处理标准IO事件。

其中,方法的标识信息可以为:请求方法签名。

所述预设的RPC协议可以为:

所述RPC请求的格式为:包长、头大小、请求方法签名、消息类型、序列编号SEQID、扩展数据长度、编码后的扩展数据内容、body主体内容长度、body主体数据。

其中,在RPC请求的包头的TMessage.name里面存储KEY=VALUE形式的头部数据。包头中包含请求方法签名、消息类型、序列编号SEQID、扩展数据长度和编码后的扩展数据内容;其中,请求方法签名由请求的方法的名称和参数列表构成。SEQID用于标识不同的RPC请求,编码后的扩展数据内容用于保存请求及响应内容。消息类型是远程方法调用的类型,包括四种类型:CALL(业务调用)、EXCEPTION(异常处理)、REPLY(请求响应)和ONEWAY(扩展使用)。扩展数据主要用于除了业务数据外其它的数据传输和方法调用,也可以作为方法回调的用途。

具体的,由于服务端设备可以通过与多个客户端设备通信连接,因此服务端设备常需要处理多个并发的RPC请求,这种情况下,可以通过上述消息生产队列的方式处理并发的RPC请求。

其中,方法执行单元300可以具体用于:在所述服务端设备本地查找具有得到的所述标识信息的键key,根据与所述key对应的值value中存储的方法参数生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

其中,在生成写消息时,将生成的写消息放入写消息生产队列中;

在生成读消息时,将生成的读消息放入读消息生产队列中。

服务端设备可以读取需要对外提供服务的类,对外服务的接口通过注解的形式进行声明,由统一的Sign方法进行注册,以key-value形式保存到服务端设备内存当中,其中key即注解实例名称,value值存储实际的类方法和参数列表,当服务端接收到服务调用请求时,从key中识别指定服务,并实现调用。其中,注解可以标识方法可被用于远程调用,没有注解的方法无法被远程调用。

具体的,可以使用java的线程池去管理并发的连接、异步处理连接和远程调用请求。

其中,消息执行单元400可以包括:写消息处理子单元和读消息处理子单元,

所述写消息处理子单元,用于从所述写消息消费者线程池中获取线程执行所述写消息生产队列中的写消息,在执行所述写消息成功后,将执行结果反馈至所述客户端设备,其中,在线程执行完所述写消息后,所述服务端设备将该线程放回所述写消息消费者线程池;

所述读消息处理子单元,用于从所述读消息消费者线程池中获取线程执行所述读消息生产队列中的读消息,在执行所述读消息成功后,将执行结果反馈至所述客户端设备,其中,在线程执行完所述读消息后,所述服务端设备将该线程放回所述读消息消费者线程池。

通过单独的读消息生产队列及写消息生产队列,就使得进行读及进行写的线程分离。

可选的,如图4所示,本发明实施例提供的另一种远程过程调用装置,还可以包括:结果监控单元500、触发判断单元600和事件触发单元700,

所述结果监控单元500,用于对线程执行所述消息生产队列中的消息的执行结果进行监控;

所述触发判断单元600,用于判断所述执行结果是否满足预设的触发条件,如果是,则触发所述事件触发单元700;

所述事件触发单元700,用于触发与所满足的触发条件匹配的事件。

具体的,本发明可以采用Java.NIO的selector选择器模型进行事件注册。

具体的,在本发明其他实施例中,所述装置还可以包括:地址绑定单元和选择器创建单元,

所述地址绑定单元,用于在所述请求监听单元对所述客户端设备的连接请求进行监听之前,绑定对所述客户端设备的连接请求进行监听的监听地址TServerSocket,注册与所述客户端设备进行连接的接口方法存根RpcProxyProcessor;

所述选择器创建单元,用于启动IO线程,创建选择器Selector,将ServerSocketChannel注册到Selector以监听客户端设备的连接请求,Selector轮询就绪的Selector key,其中,所述Selector key为客户端设备连接服器端设备时注册到通道ServerSocketChannel中的事件的对象标识。

具体的,解析RPC请求后,可以异步写ByteBuffer到ServerSocketChannel。

其中,ServerSocketChannel是一个可以监听新进来的TCP连接的通道,就像标准IO中的ServerSocket一样。

在这种情况下,所述请求接收单元100,可以具体用于在从所述监听地址TServerSocket监听到所述客户端设备的连接请求后,由AcceptImpl设置与发送该连接请求的客户端设备进行连接的参数并根据设置的参数与发送该连接请求的客户端设备建立链接;

方法执行单元300,可以具体用于由所述Selector确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;

其中,TServerSocket主要作为服务器端的套接字管理器使用。它封装了服务端设备的套接字。在打开套接字后,服务端设备就处于监听状态,在接收到其它机器的连接请求后,与客户端设备建立链接,创建一个新的套接字,用于和客户端设备互传数据,此时TServerSocket组件则继续监听客户端设备的连接请求。

本发明实施例提供的远程过程调用装置,可以接收所述客户端设备发送的远程过程调用协议RPC请求;根据预设的RPC协议对所述RPC请求进行解析,得到所述RPC请求中的请求调用的方法的标识信息;确定所述客户端设备请求调用的方法,执行所述客户端设备请求调用的方法以生成与该方法对应的消息,将生成的消息放入消息生产队列中,其中,生成的消息包括写消息和/或读消息;从线程池中选择线程执行所述消息生产队列中的消息并将执行结果反馈至所述客户端设备。本发明可以通过RPC请求中的请求调用的方法的标识信息来执行该方法,因此无需生成IDL文件,简化了RPC调用过程。本发明不需要修改客户端设备对所要调用的方法的定义,客户端设备只需要通过方法的标识信息就可以实现方法的调用,简单易用。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1