一种远程服务通信方法与流程

文档序号:14748482发布日期:2018-06-22 08:43阅读:311来源:国知局

本发明涉及远程数据处理技术领域,尤其涉及一种远程服务通信方法。



背景技术:

进程间通信(IPC)是分布式系统设计和实现的基础,IPC将分布式系统的通过网络连接的、交互的并发进程连接起来,使其构成一个系统。IPC既用于交换数据和信息,也用于协调进程活动。

进程之间交互的模型有多种,分别对应着IPC的不同抽象。其中最常见的包括共享存储、远程过程调用(RPC)和消息传递。

其中,RPC按照以下方法工作:当一个应用程序A需要与远程的另一个应用程序B交换信息或要求B提供协助时,A将在本地产生一个请求,通过通讯链路,通知B接收信息或提供相应的服务,B完成相关处理后将确认信息或结果返回给A。RPC强调通信的两个应用程序所处的环境和平台中必须是相同的,而且必须同时处于运行状态。

执行远程调用时,需要应用程序间的紧密藕合,通讯线路必须在通信期间一直保持良好的状态,而且必须进行大量的底层通讯的编程工作。而新旧系统的更替、开发平台或者环境的改变、新功能新需求的引入,都有可能需要对已有代码进行重新开发,通信协议也需要进行相应变更。但是已有代码的重新开发和通信协议的变更,均要求程序员熟悉相关概念,能够自行设计控制流程,客户和服务进程必须相互配合且必须都处于运行状态,技术上有一定的难度。



技术实现要素:

本发明为解决现有技术中存在的问题,提供了一种远程服务通信方法。

一方面,本发明提出一种远程服务通信方法,包括:S1,接收客户端发送的应用客户端配置代码生成的请求命令,根据服务端配置代码对所述请求命令进行解析,获取业务参数;所述客户端配置代码和服务端配置代码分别是根据配置文件生成的用于客户端和服务端的RPC代码;S2,根据所述业务参数从所述服务端配置代码中调用相应的函数,生成运行结果;S3,将所述运行结果返回所述客户端。

优选地,所述配置文件为XML文件,所述配置文件包括业务参数信息、端口信息、客户端信息和服务端信息。

优选地,还包括:S01,遍历所述配置文件,获取所述配置文件中的各个业务参数信息、端口信息和服务端信息;S02,将所述各个业务参数信息整合为业务参数列表,将各个所述端口信息整合为端口字符串,将各个所述服务端信息整合为服务端字典;S03,应用所述业务参数列表和端口字符串生成与所述服务端字典对应的服务端配置代码。

优选地,所述请求命令由请求数据长度和请求数据构成;所述请求数据包括通信协议类型、业务参数和预设字节。

优选地,所述步骤S1进一步包括:接收客户端发送的请求命令,根据所述请求命令中的请求数据长度申请内存空间;将所述请求命令中的请求数据写入所述内存空间中;对所述内存空间中的数据进行解析,获取业务参数。

优选地,所述步骤S3进一步包括:将所述运行结果转换为网络通信包,调用start_snd()函数将所述网络通信包返回所述客户端。

优选地,所述配置文件包括文件头和文件体;所述文件头由XML声明和DTD文件类型声明构成;所述文件体包括所述业务参数信息、端口信息、客户端信息和服务端信息;所述业务参数信息中,通信协议类型为同步或异步,业务参数的值的类型包括string、char*、ulong、uint、bool和void*中的至少一种,所述业务参数的类型为输入、输出或输入输出;所述端口信息中,端口号为string类型。

另一方面,本发明提出一种远程服务通信方法,包括:s1,应用客户端配置代码将用户请求转换为请求命令,并将所述请求命令发送到服务端,以使得所述服务端能够根据服务端配置代码对所述请求命令进行解析,获取业务参数,并根据所述业务参数从所述服务端配置代码中调用相应的函数,生成运行结果并返回;所述客户端配置代码和服务端配置代码分别是根据配置文件生成的用于客户端和服务端的RPC代码;s2,接收所述服务端返回的运行结果。

优选地,所述配置文件为XML文件,所述配置文件包括业务参数信息、端口信息、客户端信息和服务端信息。

优选地,还包括:s01,遍历所述配置文件,获取所述配置文件中的各个业务参数信息、端口信息和客户端信息;s02,将所述各个业务参数信息整合为业务参数列表,将各个所述端口信息整合为端口字符串,将各个所述客户端信息整合为客户端字典;s03,应用所述业务参数列表和端口字符串生成与所述客户端字典对应的客户端配置代码。

本发明提供的一种远程服务通信方法,通过配置文件生成客户端和服务端配置代码,避免了由于业务需求变动产生参数不匹配和代码工作量大的问题,能够快速满足业务需求变动,有利于减少开发人员的工作量,实现软件开发项目的持续稳定运转。

附图说明

图1为本发明具体实施例的一种远程服务通信方法的流程示意图;

图2为本发明具体实施例的同步通信协议结构图;

图3为本发明具体实施例的异步通信协议结构图;

图4为本发明具体实施例的配置代码生成流程图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

本发明提出的远程服务通信方法,分为客户端和服务端两方用于阐述,首先针对服务端的远程服务通信方法进行说明:

图1为本发明具体实施例的一种远程服务通信方法的流程示意图,如图1所示,一种远程服务通信方法,包括:S1,接收客户端发送的应用客户端配置代码生成的请求命令,根据服务端配置代码对所述请求命令进行解析,获取业务参数;所述客户端配置代码和服务端配置代码分别是根据配置文件生成的用于客户端和服务端的RPC代码;S2,根据所述业务参数从所述服务端配置代码中调用相应的函数,生成运行结果;S3,将所述运行结果返回所述客户端。

具体地,首先,客户端应用客户端配置代码生成请求命令,并将所述请求命令发送给服务端。其中,所述客户端配置代码是根据配置文件生成的用于客户端的远程过程调用协议代码,所述远程过程调用协议(Remote Procedure Call,RPC)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

服务端接收所述请求命令,并应用服务端配置代码对所述请求命令进行解析,获取所述请求命令中包含的业务参数。其中,所述服务端配置代码是根据配置文件生成的用于服务端的远程过程调用协议代码。

接着,服务端根据上一步骤中从所述请求命令中解析得出的业务参数,从所述服务端配置代码中调用与所述业务参数对应的函数,并生成运行结果。

最后,服务端将上述运行结果返回客户端,客户端接收所述运行结果。

本发明具体实施例中,通过配置文件生成客户端和服务端配置代码,避免了由于业务需求变动产生参数不匹配和代码工作量大的问题,能够快速满足业务需求变动,有利于减少开发人员的工作量,实现软件开发项目的持续稳定运转。

基于上述具体实施例,一种远程服务通信方法,所述配置文件为XML文件,所述配置文件包括业务参数信息、端口信息、客户端信息和服务端信息。

具体地,所述配置文件为XML文件,XML(Extensible Markup Language)是一种用于标记电子文件使其具有结构性的标记语言,在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息,比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

所述配置文件包括业务参数信息、端口信息、客户端信息和服务端信息。

其中,所述业务参数信息用于定义业务参数的格式规范,所述端口信息用于定义通讯端口,所述客户端信息用于定义客户端生成的代码类型和代码名称,服务端信息用于定义服务端生成的代码类型和代码名称。

本发明具体实施例中,配置文件实现了对业务参数、端口、客户端和服务端的配置,为客户端和服务端代码的统一提供了条件。

基于上述任一具体实施例,一种远程服务通信方法,还包括:S01,遍历所述配置文件,获取所述配置文件中的各个业务参数信息、端口信息和服务端信息;S02,将所述各个业务参数信息整合为业务参数列表,将各个所述端口信息整合为端口字符串,将各个所述服务端信息整合为服务端字典;S03,应用所述业务参数列表和端口字符串生成与所述服务端字典对应的服务端配置代码。

具体地,在服务端接收请求命令,并应用服务端配置代码对所述请求命令进行解析前,需要生成服务端配置代码,并将所述服务端配置代码提供给服务端调用。

根据配置文件生成服务端配置代码的方法如下:

首先,读取并遍历所述配置文件,获取所述配置文件中各个业务参数信息、端口信息和服务端信息;

其次,分别对上述步骤中通过遍历配置文件获取的各个业务参数信息、端口信息和服务端信息进行整合:将各个业务参数信息整合为业务参数列表,将各个端口信息中和为端口字符串,将各个服务端信息整合为服务端字典。

最后,应用所述业务参数列表和端口字符串生成与所述服务端字典对应的服务端配置代码,并将所述服务端配置代码提供给服务端调用。

例如,业务参数信息、端口信息、客户端信息和服务端信息的整合形式如下:

其中,funcs为业务参数列表,port为端口字符串,client为客户端字典,server为服务端字典。

进一步地,所述配置文件包括文件头和文件体;所述文件头由XML声明和DTD文件类型声明构成;所述文件体包括所述业务参数信息、端口信息、客户端信息和服务端信息;所述业务参数信息中,通信协议类型为同步或异步,业务参数的值的类型包括string、char*、ulong、uint、bool和void*中的至少一种,所述业务参数的类型为输入、输出或输入输出;所述端口信息中,端口号为string类型。

例如,所述XML声明如下:

<<?xml version=\"1.0\"encoding=\"utf-8\"?>>

其中,“<?”表示一条指令的开始,“?>”表示一条指令的结束,“xml”表示当前文件是XML文件,“version=\"1.0\"”表示此文件用的是XML1.0标准,“encoding=\"utf-8”表示此文件所用的字符集。

通信协议类型为同步sync或异步async。

业务参数列表中,以open为例,open的各个标签被解析为如下格式:

[[{'func_name':'open','type':'sync','pt_params':[],'params':[{'param_name':'dev_path','param_value':'string','param_type':'in'},{'param_name':'fd','param_value':'ulong','param_type':'out'}]},{……}]

其中,函数名称为open,函数类型为同步,业务参数dev_path的值为string类型,dev_path的类型为输入,业务参数fd的值为ulong类型,fd的类型为输出。

port、client、server被解析如下:

8088

{'namespace':'nbd','type':'C++','filename':'nbd_client'}

{'namespace':'nbd','type':u'C++','filename':'transfer_server'}

其中,端口为8088,客户端的命名空间为nbd,客户端语言类型为C++,客户端代码名称为nbd_client,服务端的命名空间为nbd,服务端语言类型为C++,服务端代码名称为transfer_server。

本发明具体实施例中,通过配置文件生成了服务端配置代码,同理可通过配置文件生成客户端配置代码,通过应用配置文件对客户端和服务端进行配置,实现了客户端和服务端代码的统一。

基于上述任一具体实施例,一种远程服务通信方法,所述请求命令由请求数据长度和请求数据构成;所述请求数据包括通信协议类型、业务参数和预设字节。

具体地,所述请求命令包括由请求数据长度和请求数据两部分构成。其中,所述请求数据长度为文件头存放的len,文件头后面为数据区,即请求数据。

所述请求数据包括通信协议类型、业务参数和预设字节。其中,所述预设字节包括condition、void*等,所述预设字节用于通信协商,对应内存中的指针地址。

所述请求数据的类型包括:bool占一个字节,uint占4个字节,ulong占8个字节,void*占8个字节,char*占8个字节,string自定义长度。

基于上述任一具体实施例,一种远程服务通信方法,所述步骤S1进一步包括:S11,接收客户端发送的请求命令,根据所述请求命令中的请求数据长度申请内存空间;S12,将所述请求命令中的请求数据写入所述内存空间中;S13,应用服务端配置代码对所述内存空间中的数据进行解析,获取业务参数。

具体地,客户端应用客户端配置代码生成请求命令,并将所述请求命令发送给服务端后,服务端接收所述请求命令,并从所述请求命令中提取请求数据长度,根据所述请求数据长度申请内存空间。本发明具体实施例中,调用data()函数申请内存。

随后,提取所述请求命令中的请求数据,并将所述请求数据写入上一步骤中申请的内存中。以open函数为例,对应的请求命令前8个字节为请求数据长度len,其后即请求数据。请求数据的内存头func_type为sync,即同步处理,中间为业务参数dev_path,其类型为字符型,后面为condition和void*两个指针类型,指向data()函数。

最后,服务端通过服务端配置代码对上一步骤写入内存空间的请求数据进行解析,获取业务参数。

本发明具体实施例中,给出了应用服务端配置代码对请求命令进行解析的具体过程,为实现客户端与服务端代码的统一提供了条件。

基于上述任一具体实施例,一种远程服务通信方法,所述步骤S3进一步包括:将所述运行结果转换为网络通信包,调用start_snd()函数将所述网络通信包返回所述客户端。

随后,本发明针对客户端的远程服务通信方法进行说明:

基于上述任一具体实施例,一种远程服务通信方法,s1,应用客户端配置代码将用户请求转换为请求命令,并将所述请求命令发送到服务端,以使得所述服务端能够根据服务端配置代码对所述请求命令进行解析,获取业务参数,并根据所述业务参数从所述服务端配置代码中调用相应的函数,生成运行结果并返回;所述客户端配置代码和服务端配置代码分别是根据配置文件生成的用于客户端和服务端的RPC代码;s2,接收所述服务端返回的运行结果。

具体地,首先,客户端应用客户端配置代码生成请求命令,并将所述请求命令发送给服务端。其中,所述客户端配置代码是根据配置文件生成的用于客户端的远程过程调用协议代码。

服务端接收所述请求命令,并应用服务端配置代码对所述请求命令进行解析,获取所述请求命令中包含的业务参数。其中,所述服务端配置代码是根据配置文件生成的用于服务端的远程过程调用协议代码。

接着,服务端根据上一步骤中从所述请求命令中解析得出的业务参数,从所述服务端配置代码中调用与所述业务参数对应的函数,并生成运行结果。

最后,服务端将上述运行结果返回客户端,客户端接收所述服务端返回的运行结果。

本发明具体实施例中,通过配置文件生成客户端和服务端配置代码,避免了由于业务需求变动产生参数不匹配和代码工作量大的问题,能够快速满足业务需求变动,有利于减少开发人员的工作量,实现软件开发项目的持续稳定运转。

基于上述具体实施例,一种远程服务通信方法,所述配置文件为XML文件,所述配置文件包括业务参数信息、端口信息、客户端信息和服务端信息。

具体地,所述配置文件为XML文件,XML(Extensible Markup Language)是一种用于标记电子文件使其具有结构性的标记语言,在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。

所述配置文件包括业务参数信息、端口信息、客户端信息和服务端信息。

其中,所述业务参数信息用于定义业务参数的格式规范,所述端口信息用于定义通讯端口,所述客户端信息用于定义客户端生成的代码类型和代码名称,服务端信息用于定义服务端生成的代码类型和代码名称。

本发明具体实施例中,配置文件实现了对业务参数、端口、客户端和服务端的配置,为客户端和服务端代码的统一提供了条件。

基于上述任一具体实施例,一种远程服务通信方法,还包括:s01,遍历所述配置文件,获取所述配置文件中的各个业务参数信息、端口信息和客户端信息;s02,将所述各个业务参数信息整合为业务参数列表,将各个所述端口信息整合为端口字符串,将各个所述客户端信息整合为客户端字典;s03,应用所述业务参数列表和端口字符串生成与所述客户端字典对应的客户端配置代码。

具体地,在客户端应用客户端配置代码生成请求命令,并将所述请求命令发送给服务端前,需要生成客户端配置代码,并将所述客户端配置代码提供给客户端调用。

根据配置文件生成客户端配置代码的方法如下:

首先,读取并遍历所述配置文件,获取所述配置文件中各个业务参数信息、端口信息和客户端信息;

其次,分别对上述步骤中通过遍历配置文件获取的各个业务参数信息、端口信息和客户端信息进行整合:将各个业务参数信息整合为业务参数列表,将各个端口信息中和为端口字符串,将各个客户端信息整合为客户端字典。

最后,应用所述业务参数列表和端口字符串生成与所述服务端字典对应的服务端配置代码,并将所述服务端配置代码提供给服务端调用。

例如,业务参数信息、端口信息、客户端信息和服务端信息的整合形式如下:

其中,funcs为业务参数列表,port为端口字符串,client为客户端字典,server为服务端字典。

进一步地,所述配置文件包括文件头和文件体;所述文件头由XML声明和DTD文件类型声明构成;所述文件体包括所述业务参数信息、端口信息、客户端信息和服务端信息;所述业务参数信息中,通信协议类型为同步或异步,业务参数的值的类型包括string、char*、ulong、uint、bool和void*中的至少一种,所述业务参数的类型为输入、输出或输入输出;所述端口信息中,端口号为string类型。

例如,所述XML声明如下:

<<?xml version=\"1.0\"encoding=\"utf-8\"?>>

其中,“<?”表示一条指令的开始,“?>”表示一条指令的结束,“xml”表示当前文件是XML文件,“version=\"1.0\"”表示此文件用的是XML1.0标准,“encoding=\"utf-8”表示此文件所用的字符集。

通信协议类型为同步sync或异步async。

业务参数列表中,以open为例,open的各个标签被解析为如下格式:

[[{'func_name':'open','type':'sync','pt_params':[],'params':[{'param_name':'dev_path','param_value':'string','param_type':'in'},{'param_name':'fd','param_value':'ulong','param_type':'out'}]},{……}]

其中,函数名称为open,函数类型为同步,业务参数dev_path的值为string类型,dev_path的类型为输入,业务参数fd的值为ulong类型,fd的类型为输出。

port、client、server被解析如下:

8088

{'namespace':'nbd','type':'C++','filename':'nbd_client'}

{'namespace':'nbd','type':u'C++','filename':'transfer_server'}

其中,端口为8088,客户端的命名空间为nbd,客户端语言类型为C++,客户端代码名称为nbd_client,服务端的命名空间为nbd,服务端语言类型为C++,服务端代码名称为transfer_server。

本发明具体实施例中,通过配置文件生成了客户端配置代码,同理可通过配置文件生成服务端配置代码,通过应用配置文件对客户端和服务端进行配置,实现了客户端和服务端代码的统一。

基于上述任一具体实施例,一种远程服务通信方法,所述请求命令由请求数据长度和请求数据构成;所述请求数据包括通信协议类型、业务参数和预设字节。

具体地,所述请求命令包括由请求数据长度和请求数据两部分构成。其中,所述请求数据长度为文件头存放的len,文件头后面为数据区,即请求数据。

所述请求数据包括通信协议类型、业务参数和预设字节。其中,所述预设字节包括condition、void*等,所述预设字节用于通信协商,对应内存中的指针地址。

所述请求数据的类型包括:bool占一个字节,uint占4个字节,ulong占8个字节,void*占8个字节,char*占8个字节,string自定义长度。

为了更好地理解与应用本发明提出的一种远程服务通信方法,本发明进行以下示例,且本发明不仅局限于以下示例。

首先,编写配置文件Project.xml。

所述配置文件为XML文件,由文件头和文件体两部分构成。其中,所述文件头由XML声明和DTD文件类型声明构成。

所述文件体中包括XML文件的内容,XML元素是XML文件内容的基本单元,其格式如下:

<标记名称属性名1=\"属性值1\"属性名1=\"属性值1\"……>内容</标记名称>

配置文件用于定义服务端server与客户端client间的函数,例如在配置文件func name中定义一个函数open,client则生成一个open C++函数,用户调用open函数,解析完后通过内部协议传到server端,server端解析配置文件的open函数,调用client的open函数返回client端,形成一个循环。

图2为本发明具体实施例的同步通信协议结构图,如图2所示,所述配置文件生成的任一函数func对应的通信协议内容如下:

构造lt_data_t,首先根据发送内容确定开辟内存大小,除了输出参数不需要传送外,输入和输入输出参数均需要传递,然后计算长度,调用data()函数开辟内存。然后把需要写的参数写到开辟好的内存里。如open()函数,其buffer头为8个字节len,后面是内存,内存头func_type为同步处理sync,中间为业务参数dev_path的长度,类型为字符型,后面为condition和void*两个指针类型,指向data()函数。

图3为本发明具体实施例的异步通信协议结构图,如图3所示,相比图2,异步通信协议比同步通信协议减少了condition指针类型。

其次,图4为本发明具体实施例的配置代码生成流程图,如图4所示,应用配置文件生成服务端配置代码和客户端配置代码:

1)运行代码生成器,读取编写的配置文件,遍历配置文件的funcs、port、server、client,生成列表、字符或字典。

2)调用generate_client_h.py、generate_client_cpp.py与产生与客户端的filename字段对应的客户端C++文件,重定向到output文件夹下产生客户端client.h与client.cpp文件;

调用generate_server_cpp.py和generate_server_h.py产生与服务端的filename字段对应的服务端C++文件,重定向到output文件夹下产生客户端server.h与server.cpp文件。

随后,客户端应用client.h与client.cpp生成请求命令,并将所述请求命令发送给服务端。

服务端接收所述请求命令,并应用server.h与server.cpp对所述请求命令进行解析,获取所述请求命令中包含的业务参数。

接着,服务端根据上一步骤中从所述请求命令中解析得出的业务参数,从所述服务端配置代码中调用与所述业务参数对应的函数,即服务端创建派生类继承server_handler虚基类,并生成运行结果。

最后,代码生成器接着会把运行结果转换成网络通信协议的包,然后通过调用session的start_snd()函数将结果返回给客户端

本示例中,通过配置文件生成客户端和服务端配置代码,避免了由于业务需求变动产生参数不匹配和代码工作量大的问题,能够快速满足业务需求变动,有利于减少开发人员的工作量,实现软件开发项目的持续稳定运转。

最后,本申请的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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