一种基于专用通道的远程函数调用方法技术

技术编号:34321763 阅读:9 留言:0更新日期:2022-07-31 00:20
本发明专利技术涉及一种基于专用通道的远程函数调用方法,属于数据存储技术领域。本发明专利技术的方法中形成独立的远程函数调用动态库,并通过线程池高性能调度应用程序发起的远程调用,通过哈希表快速索引远程服务集合、分发数据并收集返回函数执行结果,通过桩函数使用不同的通信协议收发数据,并且可以添加新的通信协议,进而对外提供了完整的函数调用、服务注册、协议替换接口。本发明专利技术创新性地实现了支持多通信协议的远程函数调用方法,在保证数据传输效率的同时,提供了规范的程序调用方法,简化了多机应用程序的开发流程。应用程序的开发流程。应用程序的开发流程。

A method of remote function call based on special channel

【技术实现步骤摘要】
一种基于专用通道的远程函数调用方法


[0001]本专利技术属于数据存储
,具体涉及一种基于专用通道的远程函数调用方法。

技术介绍

[0002]远程函数调用在多机应用程序开发中应用广泛,特别是在许多大型的集群系统中,远程函数调用通常是通过其底层标准的通信模块实现。现有许多开源的远程函数调用框架,但其通信接口大多使用TCP/IP协议,或者是应用层的HTTP协议,不支持专用通道上的定制化协议。在专用通道上,为了贴合通道特性、获取最优性能,用户通常会实现特定的通信协议,这类协议不支持TCP/IP协议上的通用SOCKET编程函数,所以无法使用主流的开源远程函数调用框架。远程函数调用不仅能够提高系统通信性能,而且能够简化开发流程,缩短开发周期,是集群系统编程中常用的中间件。因此基于专用通道设计研发一套远程函数调用方法对于专用系统开发意义重大。

技术实现思路

[0003](一)要解决的技术问题
[0004]本专利技术要解决的技术问题是:如何为无法使用通用TCP/IP协议以及SOCKET编程的专用通道提供底层的远程函数调用方法。
[0005](二)技术方案
[0006]为了解决上述技术问题,本专利技术提供了一种基于专用通道的远程函数调用方法,包括以下步骤:
[0007]第一步,设计一个可同时在服务端和客户端使用的远程函数调用动态库,提供客户端的函数调用接口与回调函数接口,同时提供服务端的注册服务接口,以及提供支持不同网络协议的通信接口;所述远程函数调用动态库内部分为应用层、处理层和通信层,其中,应用层负责与外部接口交互,以及转发数据到处理层和接收处理层的数据;处理层负责数据编码、解码与分发,解耦通信层的工作;通信层则根据提供的接口协议收发数据;
[0008]第二步,提出线程池设计方法
[0009]首先是初始化流程,客户端通过特定的协议与服务端建立连接,客户端按照系统硬件性能创建相应数量的线程,形成线程池,等待函数任务唤醒执行,每个线程持有一份与服务端的连接,每份连接包括多种协议的句柄;
[0010]在完成线程池的初始化后,应用程序即可发起远程函数的调用,其中,允许应用程序采用异步的方式进行调用,应用程序只需要传入函数名、参数以及回调函数信息就可以返回,客户端会将这些数据打包并放入待执行函数队列中,而线程池中的所有线程都在轮询待执行函数队列,空闲的线程会将数据取出并发送至服务端;
[0011]最后,发送数据的线程会阻塞等待服务端返回,并解析收到的数据,调用相应的回调函数,完成本次远程函数调用;
[0012]第三步,提出哈希索引服务设计方法
[0013]用户首先注册供远端应用程序调用的函数服务,即编写相应的函数处理代码,并将函数名保存在远程服务集合中;
[0014]服务端在接收到用户的服务注册请求后,将函数名与参数信息进行哈希处理,并将哈希值与相应的函数调用地址建立映射关系,保存到哈希表中,之后如果服务端接收到来自客户端的远程调用,则解析数据,获取到函数名和参数信息,就可通过查找该哈希表找到对应需要执行的函数,如果查表获取到函数调用地址,则执行相应函数、获取返回值并返回客户端;如果未查找到相应函数,则返回远程调用不存在的错误信息;
[0015]第四步,提出多通信协议设计方法
[0016]首先用户将通信协议中完成listen、accept、connect、read、write功能的函数与远程函数调用动态库的通信层提供的桩函数完成绑定,后续只需要在调用的时候提供指定的协议库结构体,桩函数就会使用相应的协议建立连接并传输数据;在初始化线程池时,也可提供多种协议的连接信息,使得每个线程持有多种连接,保证在函数调用时指定的协议方法能够正常执行;
[0017]第五步,基于第一步、第三步、第四步执行服务端预备流程;
[0018]第六步,基于第二步执行客户端预备流程;
[0019]第七步,基于第一步执行远程函数调用流程:当客户端与服务端完成了预备流程后,应用程序即在此基础上进行任意次数的远程函数调用,执行用户任务。
[0020]优选地,第五步具体为:首先,按照多通信协议设计方法新建协议库结构体,完成所有桩函数的映射,相关数据保存在远程函数调用动态库的通信层,这一步的代码由用户提供,协议库结构体记录了各个桩函数实际需要调用的函数地址,随后桩函数被调用时即可根据传入的协议库结构体调用真正的通信函数进行数据传输;然后,启动服务端的监听线程,该线程调用listen桩函数,按照指定的协议对通信端口进行监听;在监听到客户端的请求后,调用accept桩函数建立连接,并建立新线程处理该连接上的读写;最后,用户在远程函数调用动态库的应用层注册所有对外提供的函数服务,按照哈希索引服务设计方法将用户提供的函数名与参数进行哈希,与最终提供服务的函数地址进行绑定存入哈希表,至此,服务端的工作就完成了,后续可通过创建新的协议库结构体添加新的协议,也可通过继续注册新的函数服务完善远程服务集合。
[0021]优选地,第六步具体为:当一个网络节点提供远程函数调用服务后,同一网络中的其他节点都可以启动客户端程序访问该远程节点上的服务;客户端首先同样新建协议库结构体,以便后续按照指定协议收发数据,然后客户端按照线程池设计方法初始化线程池,此时传入多种协议的结构信息,进而通过多种协议与服务端建立连接。
[0022]优选地,第七步中单次远程函数调用的流程如下:
[0023]客户端与远程函数调用动态库的应用层交互,使用rpc_call函数将函数名、参数以及协议库结构体传入远程函数调用动态库的通信层,阻塞等待函数返回;或通过sync_rpc_call函数异步调用远程函数,异步调用时额外传入回调函数,以便远程函数调用动态库在完成远程调用后执行;应用程序的信息传入远程函数调用动态库的应用层后将任务转给处理层,即,将数据存入待执行函数队列,等待线程池中的空闲线程取出并通过此线程专有的连接通道传递到服务端;服务端在接收到数据后,根据参数长度解析后续不定长的函
数参数数据;在服务端接收并解析完所有数据后,通过哈希表查找到需要远端节点执行的函数,传递相应的参数,获取函数执行结果;最后通过客户端建立的所述连接通道将函数执行结果返回,客户端如果是异步模式则调用回调函数,如果是同步模式则返回服务端执行的结果。
[0024]优选地,第四步提出的多通信协议设计方法实现了对专用通道及其专用协议的支持,并且兼容常用的TCP/IP协议,而且可以添加新的协议,多协议同时工作。
[0025]优选地,其特征在于,在客户端可通过使用线程池来优化系统性能。
[0026]优选地,其特征在于,在服务端可通过使用哈希表加速数据分发流程。
[0027]优选地,第七步中,传递到服务端的数据以特定的结构封装。
[0028]优选地,所述特定的结构为包括:RPC版本、域名、函数名、参数长度、函数参数数据这些信息。
[0029]本专利技术还提供了一种所述方法在数据存本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于专用通道的远程函数调用方法,其特征在于,包括以下步骤:第一步,设计一个可同时在服务端和客户端使用的远程函数调用动态库,提供客户端的函数调用接口与回调函数接口,同时提供服务端的注册服务接口,以及提供支持不同网络协议的通信接口;所述远程函数调用动态库内部分为应用层、处理层和通信层,其中,应用层负责与外部接口交互,以及转发数据到处理层和接收处理层的数据;处理层负责数据编码、解码与分发,解耦通信层的工作;通信层则根据提供的接口协议收发数据;第二步,提出线程池设计方法首先是初始化流程,客户端通过特定的协议与服务端建立连接,客户端按照系统硬件性能创建相应数量的线程,形成线程池,等待函数任务唤醒执行,每个线程持有一份与服务端的连接,每份连接包括多种协议的句柄;在完成线程池的初始化后,应用程序即可发起远程函数的调用,其中,允许应用程序采用异步的方式进行调用,应用程序只需要传入函数名、参数以及回调函数信息就可以返回,客户端会将这些数据打包并放入待执行函数队列中,而线程池中的所有线程都在轮询待执行函数队列,空闲的线程会将数据取出并发送至服务端;最后,发送数据的线程会阻塞等待服务端返回,并解析收到的数据,调用相应的回调函数,完成本次远程函数调用;第三步,提出哈希索引服务设计方法用户首先注册供远端应用程序调用的函数服务,即编写相应的函数处理代码,并将函数名保存在远程服务集合中;服务端在接收到用户的服务注册请求后,将函数名与参数信息进行哈希处理,并将哈希值与相应的函数调用地址建立映射关系,保存到哈希表中,之后如果服务端接收到来自客户端的远程调用,则解析数据,获取到函数名和参数信息,就可通过查找该哈希表找到对应需要执行的函数,如果查表获取到函数调用地址,则执行相应函数、获取返回值并返回客户端;如果未查找到相应函数,则返回远程调用不存在的错误信息;第四步,提出多通信协议设计方法首先用户将通信协议中完成listen、accept、connect、read、write功能的函数与远程函数调用动态库的通信层提供的桩函数完成绑定,后续只需要在调用的时候提供指定的协议库结构体,桩函数就会使用相应的协议建立连接并传输数据;在初始化线程池时,也可提供多种协议的连接信息,使得每个线程持有多种连接,保证在函数调用时指定的协议方法能够正常执行;第五步,基于第一步、第三步、第四步执行服务端预备流程;第六步,基于第二步执行客户端预备流程;第七步,基于第一步执行远程函数调用流程:当客户端与服务端完成了预备流程后,应用程序即在此基础上进行任意次数的远程函数调用,执行用户任务。2.如权利要求1所述的方法,其特征在于,第五步具体为:首先,按照多通信协议设计方法新建协议库结构体,完成所有桩函数的映射,相关数据保存在远程函数调用动态库的通信层,这一步的代码由用户提供,协议库结构体记录了各...

【专利技术属性】
技术研发人员:刘彬彬田鹏赵彬喻崇仁侯春雷
申请(专利权)人:北京计算机技术及应用研究所
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1