掌桥专利:专业的专利平台
掌桥专利
首页

一种远程调用方法、装置、计算机设备及存储介质

文献发布时间:2023-06-19 09:26:02


一种远程调用方法、装置、计算机设备及存储介质

技术领域

本发明实施例涉及数据传输技术领域,尤其涉及一种远程调用方法、装置、计算机设备及存储介质。

背景技术

随着互联网的发展,互联网的规模越来越大,同时服务器端的程序也越来越复杂。为了适应这个状态提出了微服务的概念,而为了实现微服务,最好的途径就是通过远程过程调用,来实现远程调用服务像调用本地函数一样的效果。

目前主流的远程过程调用包括接口描述语言和二进制通讯协议(Thrift)以及开源分布式服务框架(Dubbo)等,一般都是基于服务器/客户机(Server/Client,C/S)模式进行远程调用的,因此只能由Client端调用Server端的服务。但随着微服务的发展,逐渐需要Server端获取Client端的信息,或者需要Client端之间的互相调用等等,现有技术中的远程调用方法则不能实现。

发明内容

本发明实施例提供一种远程调用方法、装置、计算机设备及存储介质,以实现Server端和Client端之间的互相调用、Client端之间的互相调用以及Server端之间的互相调用。

第一方面,本发明实施例提供了一种远程调用方法,该方法包括:

调用目标应用程序接口,并向所述目标应用程序接口传入调用参数;

通过所述目标应用程序接口将所述调用参数发送到网关,以使所述网关确定对应的服务方,并向所述服务方转发所述调用参数;

接收所述服务方通过所述网关返回的结果数据,所述结果数据由所述服务方执行与所述调用参数对应的命令生成。

第二方面,本发明实施例还提供了一种远程调用装置,该装置包括:

接口调用模块,用于调用目标应用程序接口,并向所述目标应用程序接口传入调用参数;

参数转发模块,用于通过所述目标应用程序接口将所述调用参数发送到网关,以使所述网关确定对应的服务方,并向所述服务方转发所述调用参数;

结果接收模块,用于接收所述服务方通过所述网关返回的结果数据,所述结果数据由所述服务方执行与所述调用参数对应的命令生成。

第三方面,本发明实施例还提供了一种计算机设备,该计算机设备包括:

一个或多个处理器;

存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任意实施例所提供的远程调用方法。

第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现本发明任意实施例所提供的远程调用方法。

本发明实施例提供了一种远程调用方法,首先由调用方调用目标应用程序接口,并传入调用参数,然后将调用参数发送到网关,再由网关在确定了对应的服务方之后,向服务方转发调用参数,接着服务方即可根据调用参数执行相应的命令,并再次通过该网关将执行的结果数据返回给调用方。通过设置调用方-网关-服务方这种架构,实现了Server端和Client端之间的互相调用、Client端之间的互相调用以及Server端之间的互相调用,特别是针对网际互连协议(Internet Protocol,IP)地址均不是公网IP的两个Client端之间的互相调用,更接近真实的需求,很大的提高了程序开发的便利性。

附图说明

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

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

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

图4为本发明实施例四提供的计算机设备的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

实施例一

图1为本发明实施例一提供的远程调用方法的流程图。本实施例可适用于在微服务中任意两端相互之间进行远程过程调用的情况,该方法可以由本发明实施例提供的远程调用装置来执行,该装置可以由硬件和/或软件的方式来实现,一般可集成于计算机设备中。如图1所示,具体包括如下步骤:

S11、调用目标应用程序接口,并向目标应用程序接口传入调用参数。

远程过程调用(Remote Procedure Call,RPC),即允许一台计算机远程调用另外一台计算机以请求提供服务的过程,其中,请求提供服务的一方可以称为调用方,而提供服务的一方可以称为服务方。在本实施例中,调用方可以是服务端(Server)也可以是客户端(Client)。具体的,可以将调用方将要进行的服务所需的应用程序接口作为目标应用程序接口,调用方可以根据其中的某个应用程序将要进行的服务自动的确定目标应用程序接口进行调用,并将服务对应的调用参数传入目标应用程序接口。其中,调用参数与普通函数相类似。

S12、通过目标应用程序接口将调用参数发送到网关,以使网关确定对应的服务方,并向服务方转发调用参数。

在调用了目标应用程序接口之后,即可通过目标应用程序接口将调用参数发送到网关,再由该网关将调用参数转发至与调用方所选取服务对应的服务方。通过使用网关来完成信息的转发,可以实现调用方的一个服务对应多个服务方,此时,可以通过调用方来指定所需的服务方,也可以由网关自动选择服务方,在不指定服务方的时候,能够有效的进行负载均衡,保证了服务的质量和效率。

S13、接收服务方通过网关返回的结果数据,结果数据由服务方执行与调用参数对应的命令生成。

在网关将调用参数转发到服务方之后,服务方即可根据调用参数执行对应的命令,并生成此次调用的结果数据。再由服务方将结果数据发送到网关,以通过网关将结果数据转发回调用方。调用方收到结果数据后即可将其返回给调用目标应用程序接口的应用程序,即完成了一次远程调用的过程。

在上述技术方案的基础上,可选的,在通过目标应用程序接口将调用参数发送到网关之前,还包括:对调用参数进行序列化;相应的,通过目标应用程序接口将调用参数发送到网关,以使网关确定对应的服务方,并向服务方转发调用参数,包括:通过目标应用程序接口将序列化后的调用参数发送到网关,以使网关确定服务方,并向服务方转发序列化后的调用参数。

在传递对象时,将对象进行序列化有利于保证对象的完整性和可传递性,同时通过序列化将对象转换为有序字节流,可以便于在网络上传输或保存,相应的,可以通过反序列化根据字节流中保存的对象状态及描述信息重建对象。可选的,可以通过xml序列化和Json序列化等方法对调用参数进行序列化,优选的,通过protobuf序列化方法对调用参数进行序列化。其中,xml序列化和Json序列化是目前较为常用的数据交换格式,直接使用字段名称维护序列化后类实例中字段与数据之间的映射关系,一般用字符串的形式保存在序列化后的字节流中,消息和消息的定义相对独立,可读性好。而protobuf序列化采用二进制字节的序列化方式,用字段索引和字段类型通过算法计算得到字段之前的关系映射,相比于xml序列化和Json序列化,达到了更高的时间效率和空间效率。

具体的,调用方可以通过目标应用程序接口将序列化后的调用参数发送到网关,并由网关将序列化后的调用参数转发给确定的服务方。服务方在接收到数据后,可以对数据进行反序列化,以得到原始的调用参数,进而执行对应的命令,并生成此次调用的结果数据。然后服务方也可以将结果数据通过protobuf序列化方法进行序列化,并将序列化后的结果数据发送到网关,以通过网关将序列化后的结果数据转发回调用方。调用方在接收到数据后,也可以对数据进行反序列化,以得到原始的结果数据,再将得到的结果数据返回给调用目标应用程序接口的应用程序,即完成此次远程调用的过程。其中,可选的,通过目标应用程序接口将序列化后的调用参数发送到网关,包括:通过目标应用程序接口将序列化后的调用参数通过传输控制协议(Transmission Control Protocol,TCP)发送到网关,以使数据传输的过程具有更高的可靠性和稳定性。

在调用方调用目标应用程序接口之前,可以通过编写proto文件来定义数据格式及函数类型。首先定义protobuf信息,包括protobuf协议的版本号、包名以及消息的结构,类似于C语言中的结构体,然后定义服务函数信息,示例性的,定义一个UCLogin函数,具体可以是“+rpc UCLogin(UCLoginRequest)returns(UCLoginResponse)”,其中,输入的参数为UCLoginRequest结构体,返回的参数为UCLoginResponse的结构体,“+”代表是Server端提供的输入参数,也可以替换为“-”来代表是Client端提供的输入参数,还可以替换为“+-”来代表Server端与Client端可以双向互相调用。然后可以通过proto文件来生成对应的Server端、Client端以及网关端的代码,用户只需要将生成的代码加入到工程后编写具体的实现就可以正常调用。

本发明实施例所提供的技术方案,首先由调用方调用目标应用程序接口,并传入调用参数,然后将调用参数发送到网关,再由网关在确定了对应的服务方之后,向服务方转发调用参数,接着服务方即可根据调用参数执行相应的命令,并再次通过该网关将执行的结果数据返回给调用方。通过设置调用方-网关-服务方这种架构,实现了Server端和Client端之间的互相调用、Client端之间的互相调用以及Server端之间的互相调用,特别是针对网际互连协议(Internet Protocol,IP)地址均不是公网IP的两个Client端之间的互相调用,更接近真实的需求,很大的提高了程序开发的便利性。

实施例二

图2为本发明实施例二提供的远程调用方法的流程图。本实施例的技术方案在上述技术方案的基础上进一步细化,可选的,在调用目标应用程序接口,并向目标应用程序接口传入调用参数之前,还包括:在网关上注册自己的角色信息和服务信息。进一步可选的,通过目标应用程序接口将调用参数发送到网关,以使网关确定对应的服务方,并向服务方转发调用参数,包括:通过目标应用程序接口将调用参数发送到网关,以使网关判断目标应用程序接口的调用方是否完成注册以及是否具有调用权限,若完成注册且具有调用权限,则向服务方转发调用参数。进一步可选的,通过目标应用程序接口将调用参数发送到网关,以使网关确定对应的服务方,并向服务方转发调用参数,还包括:通过目标应用程序接口将调用参数发送到网关,以使网关判断调用方是否完成注册以及是否具有调用权限,若未完成注册或不具有调用权限,则拦截调用方的调用请求,并向调用方返回错误信息。相应的,如图2所示,具体可以包括如下步骤:

S21、在网关上注册自己的角色信息和服务信息。

其中,角色信息可以包括作为调用方时是属于Server端还是Client端,还可以包括调用方的业务信息、调用权限以及所有可调用的应用程序接口等,服务信息可以包括作为服务方时可以向外提供的服务,即接口信息。可选的,角色信息存储在网关的角色信息表中,服务信息存储在网关的服务信息表中,以便于通过网关查找到对应的服务端,并有利于后续的管控。可选的,在注册成功后,可以通过网关反馈注册成功的结果。

S22、调用目标应用程序接口,并向目标应用程序接口传入调用参数。

S23、通过目标应用程序接口将调用参数发送到网关。

S24、通过网关判断目标应用程序接口的调用方是否完成注册以及是否具有调用权限。

具体的,即可通过查询角色信息表和服务信息表来确定当前的调用方是否完成注册,并通过角色信息表中记录的该调用方的角色信息来确定该调用方是否具有调用权限。

S25、若完成注册且具有调用权限,则通过网关向服务方转发调用参数,并接收服务方通过网关返回的结果数据。

S26、若未完成注册或不具有调用权限,则通过网关拦截调用方的调用请求,并向调用方返回错误信息。

具体的,网关可以实现拦截的功能,在网关接收到调用方的调用请求时,即收到调用方发送的调用参数时,可以对调用方进行鉴定,以确定调用方是否完成注册以及是否具有调用权限等,若未完成注册或不具有调用权限,则拦截此次的调用请求,不再向服务方进行转发,并向调用方反馈调用失败的错误信息,以提示用户存在的问题。

本发明实施例所提供的技术方案,通过预先在网关上注册各端的相关信息,实现了网关对各端提出调用请求的管控过程,提高了正常调用的效率,减少了非法调用对各端造成的资源占用。

实施例三

图3为本发明实施例三提供的远程调用装置的结构示意图,该装置可以由硬件和/或软件的方式来实现,一般可集成于计算机设备中。如图3所示,该装置包括:

接口调用模块31,用于调用目标应用程序接口,并向目标应用程序接口传入调用参数;

参数转发模块32,用于通过目标应用程序接口将调用参数发送到网关,以使网关确定对应的服务方,并向服务方转发调用参数;

结果接收模块33,用于接收服务方通过网关返回的结果数据,结果数据由服务方执行与调用参数对应的命令生成。

本发明实施例所提供的技术方案,首先由调用方调用目标应用程序接口,并传入调用参数,然后将调用参数发送到网关,再由网关在确定了对应的服务方之后,向服务方转发调用参数,接着服务方即可根据调用参数执行相应的命令,并再次通过该网关将执行的结果数据返回给调用方。通过设置调用方-网关-服务方这种架构,实现了Server端和Client端之间的互相调用、Client端之间的互相调用以及Server端之间的互相调用,特别是针对网际互连协议(Internet Protocol,IP)地址均不是公网IP的两个Client端之间的互相调用,更接近真实的需求,很大的提高了程序开发的便利性。

在上述技术方案的基础上,可选的,该远程调用装置,还包括:

参数序列化模块,用于在通过目标应用程序接口将调用参数发送到网关之前,对调用参数进行序列化;

相应的,参数转发模块32具体用于:

通过目标应用程序接口将序列化后的调用参数发送到网关,以使网关确定服务方,并向服务方转发序列化后的调用参数。

在上述技术方案的基础上,可选的,参数转发模块32具体用于:

通过目标应用程序接口将序列化后的调用参数通过传输控制协议发送到网关。

在上述技术方案的基础上,可选的,该远程调用装置,还包括:

信息注册模块,用于在调用目标应用程序接口,并向目标应用程序接口传入调用参数之前,在网关上注册自己的角色信息和服务信息。

在上述技术方案的基础上,可选的,参数转发模块32具体用于:

通过目标应用程序接口将调用参数发送到网关,以使网关判断目标应用程序接口的调用方是否完成注册以及是否具有调用权限,若完成注册且具有调用权限,则向服务方转发调用参数。

在上述技术方案的基础上,可选的,参数转发模块32具体还用于:

通过目标应用程序接口将调用参数发送到网关,以使网关判断调用方是否完成注册以及是否具有调用权限,若未完成注册或不具有调用权限,则拦截调用方的调用请求,并向调用方返回错误信息。

在上述技术方案的基础上,可选的,角色信息存储在网关的角色信息表中,服务信息存储在网关的服务信息表中。

本发明实施例所提供的远程调用装置可执行本发明任意实施例所提供的远程调用方法,具备执行方法相应的功能模块和有益效果。

值得注意的是,在上述远程调用装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。

实施例四

图4为本发明实施例四提供的计算机设备的结构示意图,示出了适于用来实现本发明实施方式的示例性计算机设备的框图。图4显示的计算机设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图4所示,该计算机设备包括处理器41、存储器42、输入装置43及输出装置44;计算机设备中处理器41的数量可以是一个或多个,图4中以一个处理器41为例,计算机设备中的处理器41、存储器42、输入装置43及输出装置44可以通过总线或其他方式连接,图4中以通过总线连接为例。

存储器42作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的远程调用方法对应的程序指令/模块(例如,远程调用装置中的接口调用模块31、参数转发模块32及结果接收模块33)。处理器41通过运行存储在存储器42中的软件程序、指令以及模块,从而执行计算机设备的各种功能应用以及数据处理,即实现上述的远程调用方法。

存储器42可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至计算机设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

输入装置43可用于接收服务方通过网关返回的结果数据,以及产生与计算机设备的用户设置和功能控制有关的键信号输入等。输出装置44可用于向网关发送调用参数等。

实施例五

本发明实施例五还提供一种包含计算机可执行指令的存储介质,该计算机可执行指令在由计算机处理器执行时用于执行一种远程调用方法,该方法包括:

调用目标应用程序接口,并向目标应用程序接口传入调用参数;

通过目标应用程序接口将调用参数发送到网关,以使网关确定对应的服务方,并向服务方转发调用参数;

接收服务方通过网关返回的结果数据,结果数据由服务方执行与调用参数对应的命令生成。

存储介质可以是任何的各种类型的存储器设备或存储设备。术语“存储介质”旨在包括:安装介质,例如CD-ROM、软盘或磁带装置;计算机系统存储器或随机存取存储器,诸如DRAM、DDR RAM、SRAM、EDO RAM,兰巴斯(Rambus)RAM等;非易失性存储器,诸如闪存、磁介质(例如硬盘或光存储);寄存器或其它相似类型的存储器元件等。存储介质可以还包括其它类型的存储器或其组合。另外,存储介质可以位于程序在其中被执行的计算机系统中,或者可以位于不同的第二计算机系统中,第二计算机系统通过网络(诸如因特网)连接到计算机系统。第二计算机系统可以提供程序指令给计算机用于执行。术语“存储介质”可以包括可以驻留在不同位置中(例如在通过网络连接的不同计算机系统中)的两个或更多存储介质。存储介质可以存储可由一个或多个处理器执行的程序指令(例如具体实现为计算机程序)。

当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的远程调用方法中的相关操作。

计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。

计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。

通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

相关技术
  • 一种远程调用方法、装置、计算机设备及存储介质
  • 一种远程过程调用方法、计算机设备和存储介质
技术分类

06120112165408