CN113495796A - 服务调用方法及相关设备 - Google Patents
服务调用方法及相关设备 Download PDFInfo
- Publication number
- CN113495796A CN113495796A CN202010272948.8A CN202010272948A CN113495796A CN 113495796 A CN113495796 A CN 113495796A CN 202010272948 A CN202010272948 A CN 202010272948A CN 113495796 A CN113495796 A CN 113495796A
- Authority
- CN
- China
- Prior art keywords
- calling
- function
- caller
- data packet
- packet
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请涉及计算机技术领域,提供了一种服务调用方法,应用于RPC框架,包括:在调用方在RPC框架上通过注册信息进行协议注册后,接收调用方发起的调用请求;通过调用方所注册的组包函数对请求内容进行序列化,得到第一二进制流;将第一二进制流发送至服务标识所对应的被调用方;接收被调用方返回的数据包,被调用方调用服务标识所指示的服务根据第一二进制流所指示的参数进行运算后,得到运算结果,并根据运算结果生成数据包;通过调用方所注册的解析函数对数据包进行解析,得到响应结构体;将响应结构体发送至调用方,调用方根据响应结构体获得运算结果。实现了协议与RPC框架之间的解耦,使得该RPC框架可以适用于不同语言平台之间的服务调用。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种服务调用方法及相关设备。
背景技术
基于RPC(Remote Procedure Call,远程过程调用)协议实现远程服务调用被广泛应用,该种远程服务是通过RPC框架来实现。
现有技术中,各类RPC框架自成一套,并没有统一的RPC框架协议标准,对不同语言平台、不同框架系统间做RPC调用带来了困难,因此为了实现不同语言平台、不同框架系统在RPC调用过程中的协议兼容,需要二次开发RPC框架中实现服务调用的逻辑,而且二次开发后原RPC框架中的路由、协程等框架特性还存在无法复用的问题。
由上可知,因RPC框架的协议不统一所导致在不同框架系统之间进行RPC调用时存在兼容性问题是现有技术中亟待解决的技术问题。
发明内容
本申请的实施例提供了一种服务调用方法及相关设备,进而至少在一定程度上解决现有技术中因RPC框架的协议不统一所导致在不同框架系统之间进行RPC调用时存在兼容性问题。
本申请的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本申请的实践而习得。
根据本申请实施例的一个方面,提供了一种服务调用方法,应用于RPC框架,所述方法包括:
在调用方在所述RPC框架上通过注册信息进行协议注册后,接收所述调用方发起的调用请求,所述调用请求包括请求内容和服务标识,所述注册信息包括组包函数和解析函数;
通过所述调用方所注册的组包函数对所述请求内容进行序列化,得到第一二进制流;
将所述第一二进制流发送至所述服务标识所对应的被调用方;
接收所述被调用方返回的数据包,所述被调用方调用所述服务标识所指示的服务根据所述第一二进制流所指示的参数进行运算后,得到运算结果,并根据所述运算结果生成所述数据包;
通过所述调用方所注册的解析函数对所述数据包进行解析,得到响应结构体;
将所述响应结构体发送至所述调用方,所述调用方根据所述响应结构体获得所述运算结果。
根据本申请实施例的另一个方面,提供了一种服务调用装置,应用于RPC框架,所述装置包括:
调用请求接收模块,用于在调用方在所述RPC框架上通过注册信息进行协议注册后,接收所述调用方发起的调用请求,所述调用请求包括请求内容和服务标识,所述注册信息包括组包函数和解析函数;
组包函数调用模块,用于通过所述调用方所注册的组包函数对所述请求内容进行序列化,得到第一二进制流;
二进制流发送模块,用于将所述第一二进制流发送至所述服务标识所对应的被调用方;
数据包接收模块,用于接收所述被调用方返回的数据包,所述被调用方调用所述服务标识所指示的服务根据所述第一二进制流所指示的参数进行运算后,得到运算结果,并根据所述运算结果生成所述数据包;
解析函数调用模块,用于调用所述调用方所注册的解析函数对所述数据包进行反序列化,得到响应结构体;
响应结构体发送模块,用于将所述响应结构体发送至所述调用方,所述调用方根据所述响应结构体获得所述运算结果。
根据本申请实施例的另一个方面,提供了一种电子设备,包括:
处理器;以及存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现上述中的方法。
根据本申请实施例的另一个方面,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令被处理器执行时,实现上述中的方法。
在本公开的方案中,由于需要借助于调用方在RPC框架上所注册的注册信息中的组包函数进行序列化和利用解析函数来进行解析,而框架自身并不需要理解调用请求中的请求内容和被调用方所传送的数据包,框架自身仅进行二进制数据流的处理,从而,实现了协议与框架自身的解耦,调用方可以根据自身的协议需要在RPC框架中进行协议定义,以借助于RPC框架实现服务调用。
由于实现了协议与RPC框架自身的解耦,因此,本公开的RPC框架可以适用于不同语言平台之间的服务调用,有效解决了现有技术在不同语言平台、不同框架系统之间进行远程服务调用时,因协议不兼容需要对RPC框架进行二次开发的问题,从而使得本公开的RPC框架适用范围广。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本申请。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1是根据一实施例示出的服务调用方法的流程图;
图2是图1对应实施例的步骤150在一实施例中的流程图;
图3是根据另一实施例示出的服务调用方法的流程图;
图4是图2对应实施例的步骤230在一实施例中的流程图;
图5是图1对应实施例的步骤130之前步骤在一实施例中的流程图;
图6是根据另一实施例示出的服务调用方法的流程图;
图7是根据一实施例示出的RPC框架的框图;
图8是根据一具体实施例示出的在RPC框架中的服务调用方法的流程图;
图9是根据一实施例示出的一种服务调用装置的框图;
图10示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本申请将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。
此外,所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施例中。在下面的描述中,提供许多具体细节从而给出对本申请的实施例的充分理解。然而,本领域技术人员将意识到,可以实践本申请的技术方案而没有特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知方法、装置、实现或者操作以避免模糊本申请的各方面。
附图中所示的方框图仅仅是功能实体,不一定必须与物理上独立的实体相对应。即,可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解,而有的操作/步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
以下对本申请实施例的技术方案的实现细节进行详细阐述:
图1是根据一实施例示出的服务调用方法的流程图,应用于RPC框架。参照图1所示,该服务调用方法至少包括步骤110至步骤160,详细介绍如下:
步骤110,在调用方在RPC框架上通过注册信息进行协议注册后,接收调用方发起的调用请求,调用请求包括请求内容和服务标识,注册信息包括组包函数和解析函数。
RPC(Remote Procedure Call,远程过程调用)协议,是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。该协议允许运行于一台计算机的程序(调用方)向调用本地服务一样调用远程服务(被调用方)。
由于所调用的并不是本地服务,因此在按照RPC协议进行远程服务调用时,不能通过内存进行参数传递。进一步的,由于调用方与被调用方可能使用的是不同的语言(例如调用方用Java或Python,被调用方用C++),因此,在按照RPC协议进行远程服务调用过程中,提出了将所需要传递的信息转化为二进制数据流进行传递。
因此,RPC框架所需要实现的重要功能是将调用方与被调用方之间所需要传递的信息(例如数据结构或对象)转换成二进制数据流,或者将二进制数据流转换成调用方或者被调用方可识别的数据结构或对象。上述将数据结构或对象转换成二进制数据流的过程为序列化,将二进制数据流转换成数据结构或对象的过程为反序列化。也可以说,在RPC框架所需要实现的重要功能是实现序列化和反序列化。
可以理解的是,RPC框架所进行的序列化和反序列化是基于该RPC框架中的协议进行的。举例来说,若RPC框架设定的协议是ProtoBuf协议,则按照ProtoBuf协议进行序列化和反序列化。
现有技术中,没有RPC框架协议标准,各类RPC框架自成一套,导致在升级RPC框架时,对不同语言平台、不同框架系统间做RPC调用带来了困难,因此需要二次开发实现RPC的逻辑,而且RPC框架中的路由、上报等框架特性还无法复用。
基于此,提出了本公开的方案,在本公开的方案中,将协议和RPC框架实现解耦,也就是说,调用方可以基于自身可处理的数据格式进行协议注册,使得RPC框架在为调用方进行服务调用过程中,按照调用方所注册的协议进行序列化和反序列化。
具体来说,调用方通过注册信息来描述所定义的协议。在本方案中,注册信息中至少包括组包函数和解析函数。其中注册信息中的组包函数用于将调用方向被调用方传递的参数转换成二进制流;注册信息中的解析函数用于将被调用方向调用方所传递的信息进行反序列化为响应结构体。
在调用方通过注册信息在RPC框架完成协议注册后,该RPC框架对应可以进行处理调用方发起的调用请求。可以理解的是,调用方所发起调用请求中的服务标识用于标识所需要调用的服务,请求内容用于指示所传入的调用参数,以使得所调用的服务按照该调用参数进行运算,得到运算结果。
步骤120,通过调用方所注册的组包函数对请求内容进行序列化,得到第一二进制流。
如上所描述,组包函数用于将调用方向被调用方所传递的信息序列化为二进制数据流。第一二进制流是指组包函数将请求内容所序列化得到的二进制数据流。
可以理解的是,组包函数中的参数字段至少包括请求内容字段,从而,在调用组包函数进行运算时,将组包函数中的请求内容字段赋值为调用请求中的请求内容。
在一实施例中,组包函数中的参数字段还包括存放地址字段,该存放地址字段用于指示存放所得到第一二进制流的缓存区地址。
在一具体实施例中,组包函数为SerializeRequestFunc(Req,Buf)。其中,Req为请求内容字段,Buf为存放地址字段。在调用组包函数进行处理时,将调用请求中的请求内容赋值为该请求内容字段Req,通过该组包函数序列化得到第一二进制流后,将该第一二进制流存放于存放地址字段Buf所指示的缓存区中。
步骤130,将第一二进制流发送至服务标识所对应的被调用方。
RPC框架作为调用方与被调用方之间的媒介,一计算机设备(被调用方)上的服务若想被其他计算机设备调用,该计算机设备需要进行服务暴露,从而,其他计算机设备可以发现该计算机设备所提供可调用的服务。对于RPC框架而言,其承担了注册中心的角色,服务提供者(被调用方)在该RPC框架中进行服务注册,RPC框架对应维护该服务提供者的信息,例如地址。
那么,在RPC框架接收到调用方发起的调用请求后,根据调用请求中的服务标识确定被调用方的地址,从而,在步骤130中,按照所确定被调用方的地址将第一二进制流发送至被调用方。
步骤140,接收被调用方返回的数据包,被调用方调用服务标识所指示的服务根据第一二进制流所指示的参数进行运算后,得到运算结果,并根据运算结果生成数据包。
对于调用方而言,服务标识所指示的服务根据调用方所传入的调用进行运算后所得到的运算结果才是所需要的。因此,在被调用方得到运算结果后,以数据包的形式将该运算结果传输至RPC框架。
值得一提的是,被调用方所传输的数据包是二进制数据流。也就是说,调用方在运算得到运算结果后,对该运算结果进行序列化,得到数据包。
步骤150,通过调用方所注册的解析函数对数据包进行解析,得到响应结构体。
对于调用方而言,由于被调用方与被调用方的语言不同等原因,调用方可能并不能识别被调用方所发送的数据包。因此,在RPC框架接收到被调用方所传送的数据包后,通过调用方所注册的解析函数对该数据包进行解析,从而,通过解析函数对数据包进行解析所得到的响应结构体可以被调用方识别。
值得一提的是,解析函数对数据包所进行的解析是将数据包反序列化,构建响应结构体。
步骤160,将响应结构体发送至调用方,调用方根据响应结构体获得运算结果。
将响应结构体发送至调用方,调用方对应从响应结构体中提取得到运算结果,至此,实现服务调用。
在本公开的方案中,由于需要借助于调用方在RPC框架上所注册的注册信息中的组包函数进行序列化和利用解析函数来进行解析,而框架自身并不需要理解调用请求中的请求内容和被调用方所传送的数据包,框架自身仅进行二进制数据流的处理,从而,实现了协议与框架自身的解耦,调用方可以根据自身的协议需要在RPC框架中进行协议定义,以借助于RPC框架实现服务调用。
由于实现了协议与RPC框架自身的解耦,因此,本公开的RPC框架可以适用于不同语言平台之间的服务调用,有效解决了现有技术中因RPC框架之间的协议不同所造成的协议不兼容而需要进行二次开发的问题,从而使得本公开的RPC框架适用范围广。
在一实施例中,解析函数包括包头解析函数和包体解析函数,在该实施例中,如图2所示,步骤150,包括:
步骤210,调用包头解析函数对数据包中的包头进行解析,获得包头解析结果。
被调用方所传送的数据包包括包头和包体,包头中包括控制信息,包体中是所传送的数据内容。包头中所包含的控制信息用于控制进行包体的解析,因此,在接收到被调用方所传输的数据包后,先调用包头解析函数来进行包头的解析,来获得包头解析结果。可以理解的是,包头解析结果指示了包头中所包括的控制信息。
步骤230,调用包体解析函数根据包头解析结果对数据包中的包体进行解析,获得响应结构体。
在包头解析成功后,继续调用包体解析函数来根据包头解析结果对数据包中的包体进行解析,获得响应结构体。
在一实施例中,注册信息还包括读包长度函数,如图3所示,该方法还包括:
步骤310,调用读包长度函数,获得第一长度参数。
在一实施例中,该读包长度函数为GetDefaultSizeFunc(void),该读包长度函数的返回值是第一长度参数,因此,在调用读包长度函数时,对应获得该第一长度参数。该第一长度参数可以表示为rSize。
该第一长度参数用于指示RPC框架首次收包时的默认读取大小,调用方可以根据协议特性进行设置。
在一具体实施例中,若协议中,数据包的包头具有固定大小,该第一长度参数可以设置为包头大小。
步骤320,在接收被调用方所发送数据包的过程中,判断所接收到数据包的大小是否达到第一长度参数所指示大小。
若所接收到数据包的大小达到第一长度参数所指示大小,则执行步骤210:调用包头解析函数对数据包中的包头进行解析,获得包头解析结果。
如果所接收到数据包的大小达到第一长度参数所指示大小,则开始读取数据,并调用包头解析函数对数据包中的包头进行解析。
在一实施例中,包头解析函数为ParseRespHeaderFunc(Buf,HeaderResp,nrSize)。其中,该包头解析函数中的Buf字段,用于指示所接收到数据包(该数据包为二进制数据流)的存放地址;该包头解析函数中的HeaderResp字段为包头解析字段,其用于指示包头解析所得到的包头解析结果;该包头解析函数中的nrSize参数用于指示如果包头解析失败,下次需要继续收包的长度。
在具体实施例中,包头解析结果可以包括用于指示包体长度的包体长度字段,例如length字段;包头解析结果中还可以包括指示解析方式的字段,在此不进行具体限定。该包头解析结果用于参与到包体解析函数所进行的包体解析。
在第一长度参数rSize用于指示包头大小时,在步骤330中,若所接收到数据包的大小达到rSize时,则对应调用包头解析函数对包头进行解析,得到包头解析结果;若所接收到的数据包大小未达到rSize,则继续接收数据包,直至所接收到的数据包达到rSize。
在第一长度参数rSize并不是指示包头大小,而仅用于指示首次收包时的大小时,在所接收到的数据包达到rSize时,仍然调用包头解析函数进行包头解析。如果包头解析失败,则该包头解析函数返回参数nrSize,用于告知RPC框架继续收包。在包头解析成功时,该包头解析函数返回的参数nrSize用于指示整包的大小。
在某些协议中,例如Http/2协议,包头的大小并不固定,在此种情况下,rSize并不用于指示包头大小,而仅用于指示首次收包时的大小。
在一实施例中,包头解析结果包括第二长度参数,如图4所示,步骤230包括:
步骤410,根据第二长度参数判断所接收到数据包的大小是否达到第二长度参数所指示的大小。
在本实施例中,该包头解析结果中所包括的第二长度参数即为通过包头解析函数在进行包头解析成功所得到的nrSize。如上所描述,在包头解析成功时,该包头解析函数返回的nrSize用于指示整包的大小。
步骤420,若达到,则调用包体解析函数对所接收到数据包中的包体进行解析,获得响应结构体。
在完成包头解析后,RPC框架继续进行收包,如果所继续接收到数据的大小达到第二长度参数所指示大小(此时接收到的数据相当于包体),调用包体解析函数对所接收到包体进行解析,对应获得响应结构体。
在一实施例中,包体解析函数为ParseRespBodyFunc(Buf,HeaderResp,Resp),在该包体解析函数中,Buf字段用于指示所接收到数据包(二进制数据流)的存放地址,该HeaderResp用于指示包头解析所得到的包头解析结果,Resp字段用于指示包体解析所得到的响应结构体。
在一实施例中,如图5所示,步骤130之前,该方法还包括:
步骤510,获取调用方对应的路由指示信息。
步骤530,在RPC框架所配置的路由方式中确定路由指示信息所指示的路由方式。
在该实施例中,步骤130包括:
按照路由指示信息所指示的路由方式将第一二进制流发送至服务标识所对应的被调用方。
在一实施例中中,在步骤510之前,用户在RPC框架上进行路由指示信息的配置,从而,在接收到调用方发送的调用请求后,RPC框架对应获取该调用方对应的路由指示信息。
通过本实施例的方案,不仅实现了调用方所对应协议与RPC框架的解耦,而且,还可以进行自定义调用方对应的路由指示信息。
在一实施例中,该方法还包括:
获取调用方对应的响应指示信息。
在该实施例中,步骤110之后,该方法还包括:
按照所述响应指示信息所指示的响应方式对所述调用请求进行响应。
调用方所发送的响应指示信息用于指示RPC框架对该调用方所发送的调用请求的响应方式。
在一些RPC框架中,可能存在协议与框架特性相耦合的情况,在此种情况下,若需要使用RPC框架中的该部分框架特性,需要基于用户字段、字段参数值来决定,由于框架不理解调用方所发送调用请求中的请求内容,因此,RPC框架无法从中抽取参数并理解。
为了解决该问题,可以通过在RPC框架中配置扩展参数,以根据所配置的扩展参数来使用该部分框架特性。该扩展参数可以用于指示上述实施例中的路由指示信息、响应指示信息等。
在一实施例中,通过RPCExtPram结构体来进行调用方所对应路由指示信息和响应指示信息的指示。其中RPCExtPram定义如下:
在该RPCExtPram结构体中,RouteID用于表征路由指示信息,NorspFlag作为一标志位,用于表示响应指示信息。
如果NorspFlag标志位指示立即响应,则在接收到调用请求后,不用等待运算结果返回,先响应该调用请求,然后再处理,而运算结果通过回调接口异步将运算结果返回至调用方。在一实施例中,RPC框架中配置了ClientCall API,该ClientCall API用于用户进行RPCExtPram相关参数、请求结构体Req对应的参数、响应结构体Resp对应的参数的传入。其中,调用方所发送调用请求中的请求内容以请求结构体的形式呈现。
在一实施例中,RPC框架包括回调函数设置接口,如图6所示,该方法还包括:
步骤610,接收通过回调函数设置接口为所述调用方传送的注册信息。
步骤620,在RPC框架中按照注册信息进行协议注册。
在本实施例中,在RPC框架中配置了回调函数设置接口,通过该回调函数设置接口,用户可以将调用方对应的注册信息传送到RPC框架进行注册。注册信息例如上述实施例中的组包函数、包头解析函数、包体解析函数和读包长度函数。
图7是根据一具体实施例示出的RPC框架的框图,如图7所示,在进行服务调用之前,在通过步骤710进行调用方相应的协议注册和步骤720向RPC框架传入请求/响应/控制参数后,即可对应按照上述任一实施例中的方法由RPC框架进行服务调用。
如图7所示,RPC框架中配置了注册API和ClientCall API,其中,注册API用于实现步骤710中协议的注册,ClientCall API用于实现步骤720中请求/响应/控制参数的传入,请求参数即上述请求结构体Req对应的参数,响应参数即响应结构体Resp对应的参数,控制参数可以是RPCExtPram结构体相关的参数(例如RouteID、NorspFlag)。
在RPC框架中,除协议定义外的公共功能,由RPC框架中框架特性模块实现,框架特性模块所实现的功能例如路由、协程管理、配置管理等。
RPC框架中的网络IO模块用于与其他计算机设备进行通信,例如上述的与被调用方之间的通信等,在此不进行具体限定。
图8是根据一具体实施例示出的在RPC框架中的服务调用方法的流程图。如图8所示,包括如下步骤810-819。
步骤810,调用方通过调用ClientCall(Req,Resp)。其中,调用方调用ClientCall(Req,Resp)即视为调用方发起调用请求。
步骤811,RPC框架调用组包函数SerializeRequestFunc,对调用请求中的请求内容进行序列化,得到第一二进制流,并将序列化所得到第一二进制流写入缓存区buf中。
步骤812,通过网络向被调用方发送第一二进制流。
步骤813,调用读包长度函数GetDefaultSizeFunc,获得第一长度参数rSize。
步骤814,RPC框架接收被调用方发送的数据包。
步骤815,判断缓存区所接收到数据的大小是否达到第一长度参数rSize。若未达到,则转入步骤814,继续接收数据包;若达到,则进入步骤816。
步骤816,调用包头解析函数ParseRespHeaderFunc对所接收到的包头进行解析,获得第二长度参数ndsize。
步骤817,继续接收数据包。
步骤818,判断缓存区所接收到数据包的大小是否达到第二长度参数ndsize,或者第二长度参数ndsize恒为零;若为否,则转入步骤817,继续接收数据包;若为是,则转入步骤819。
步骤819,调用包体解析函数对缓存区中所接收到的包体进行解析,得到响应结构体Resp。
在实际中,将本公开的方案应用于微信文档中,实现了基于RPC框架封装出跨语言平台的RPC调用,并且复用RPC框架的运营系统、配置系统、路由策略,降低了开发成本,提升了运行效率。
以下介绍本申请的装置实施例,可以用于执行本申请上述实施例中的方法。对于本申请装置实施例中未披露的细节,请参照本申请上述的方法实施例。
图9是根据一实施例示出的一种服务调用装置的框图,该服务调用装置应用于RPC框架。如图9所示,该装置包括:
调用请求接收模块910,用于在调用方在所述RPC框架上通过注册信息进行协议注册后,接收所述调用方发起的调用请求,所述调用请求包括请求内容和服务标识,所述注册信息包括组包函数和解析函数。
组包函数调用模块920,用于通过所述调用方所注册的组包函数对所述请求内容进行序列化,得到第一二进制流。
二进制流发送模块930,用于将所述第一二进制流发送至所述服务标识所对应的被调用方。
数据包接收模块940,用于接收所述被调用方返回的数据包,所述被调用方调用所述服务标识所指示的服务根据所述第一二进制流所指示的参数进行运算后,得到运算结果,并根据所述运算结果生成所述数据包。
解析函数调用模块950,用于调用所述调用方所注册的解析函数对所述数据包进行反序列化,得到响应结构体。
响应结构体发送模块960,用于将所述响应结构体发送至所述调用方,所述调用方根据所述响应结构体获得所述运算结果。
在一实施例中,所述解析函数包括包头解析函数和包体解析函数,解析函数调用模块950包括:
包头解析函数调用单元,用于调用所述包头解析函数对所述数据包中的包头进行解析,获得包头解析结果。
包体解析函数调用单元,用于调用所述包体解析函数根据所述包头解析结果对所述数据包中的包体进行解析,获得所述响应结构体。
在一实施例中,所述注册信息还包括读包长度函数,该装置还包括:
读包长度调用模块,用于调用所述读包长度函数,获得第一长度参数。
跳转模块,用于在接收所述被调用方所发送数据包的过程中,若所接收到数据包的大小达到所述第一长度参数所指示大小,则跳转至包头解析函数调用单元。
在一实施例中,所述包头解析结果包括第二长度参数,包体解析函数调用单元,包括:
判断单元,用于根据所述第二长度参数判断所接收到数据包的大小是否达到所述第二长度参数所指示的大小;
包体解析单元,用于若判断单元判断所接收到数据包的大小达到所述第二长度参数所指示的大小,则调用所述包体解析函数对所接收到数据包中的包体进行解析,获得所述响应结构体。
在一实施例中,该装置还包括:
路由指示信息获取模块,用于获取所述调用方对应的路由指示信息。
路由方式确定模块,用于在所述RPC框架所配置的路由方式中确定所述路由指示信息所指示的路由方式;
在该实施例中,二进制流发送模块930还被配置为:
按照所述路由指示信息所指示的路由方式将所述第一二进制流发送至所述服务标识所对应的被调用方。
在一实施例中,该装置还包括:
响应指示信息获取模块,用于获取所述调用方对应的响应指示信息。
应答信息发送模块,用于若所述响应指示信息指示立即进行响应,则向所述调用方发送应答信息;
第二跳转模块,用于待完成所述应答信息的发送,跳转至组包函数调用模块920。
在一实施例中,所述RPC框架包括回调函数设置接口,该装置还包括:
注册信息接收模块,用于接收通过所述回调函数设置接口为所述调用方传送的注册信息;
协议注册模块,用于在所述RPC框架中按照所述注册信息进行协议注册。
上述装置中各个模块/单元的功能和作用的实现过程具体详见上述方法中对应步骤的实现过程,在此不再赘述。
可以理解,这些模块可以通过硬件、软件、或二者结合来实现。当以硬件方式实现时,这些模块可以实施为一个或多个硬件模块,例如一个或多个专用集成电路。当以软件方式实现时,这些模块可以实施为在一个或多个处理器上执行的一个或多个计算机程序。
图10示出了适于用来实现本申请实施例的电子设备的计算机系统的结构示意图。
需要说明的是,图10示出的电子设备的计算机系统1000仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图10所示,计算机系统1000包括中央处理单元(Central Processing Unit,CPU)1001,其可以根据存储在只读存储器(Read-Only Memory,ROM)1002中的程序或者从存储部分1008加载到随机访问存储器(Random Access Memory,RAM)1003中的程序而执行各种适当的动作和处理,例如执行上述实施例中的方法。在RAM 1003中,还存储有系统操作所需的各种程序和数据。CPU 1001、ROM 1002以及RAM 1003通过总线1004彼此相连。输入/输出(Input/Output,I/O)接口1005也连接至总线1004。
以下部件连接至I/O接口1005:包括键盘、鼠标等的输入部分1006;包括诸如阴极射线管(Cathode Ray Tube,CRT)、液晶显示器(Liquid Crystal Display,LCD)等以及扬声器等的输出部分1007;包括硬盘等的存储部分1008;以及包括诸如LAN(Local AreaNetwork,局域网)卡、调制解调器等的网络接口卡的通信部分1009。通信部分1009经由诸如因特网的网络执行通信处理。驱动器1010也根据需要连接至I/O接口1005。可拆卸介质1011,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1010上,以便于从其上读出的计算机程序根据需要被安装入存储部分1008。
特别地,根据本申请的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本申请的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1009从网络上被下载和安装,和/或从可拆卸介质1011被安装。在该计算机程序被中央处理单元(CPU)1001执行时,执行本申请的系统中限定的各种功能。
需要说明的是,本申请实施例所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(Erasable Programmable Read Only Memory,EPROM)、闪存、光纤、便携式紧凑磁盘只读存储器(Compact Disc Read-Only Memory,CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。其中,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现,所描述的单元也可以设置在处理器中。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。上述计算机可读存储介质存储有计算机可读指令,当上述计算机可读指令被处理器执行时,例如上述电子设备中的处理器执行时,实现上述任一实施例中的方法。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本申请的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本申请实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本申请实施方式的方法。
在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
本领域技术人员在考虑说明书及实践这里公开的实施方式后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求来限制。
Claims (10)
1.一种服务调用方法,应用于RPC框架,其特征在于,所述方法包括:
在调用方在所述RPC框架上通过注册信息进行协议注册后,接收所述调用方发起的调用请求,所述调用请求包括请求内容和服务标识,所述注册信息包括组包函数和解析函数;
通过所述调用方所注册的组包函数对所述请求内容进行序列化,得到第一二进制流;
将所述第一二进制流发送至所述服务标识所对应的被调用方;
接收所述被调用方返回的数据包,所述被调用方调用所述服务标识所指示的服务根据所述第一二进制流所指示的参数进行运算后,得到运算结果,并根据所述运算结果生成所述数据包;
通过所述调用方所注册的解析函数对所述数据包进行解析,得到响应结构体;
将所述响应结构体发送至所述调用方,所述调用方根据所述响应结构体获得所述运算结果。
2.根据权利要求1所述的方法,其特征在于,所述解析函数包括包头解析函数和包体解析函数,所述通过所述调用方所注册的解析函数对所述数据包进行解析,获得响应结构体,包括:
调用所述包头解析函数对所述数据包中的包头进行解析,获得包头解析结果;
调用所述包体解析函数根据所述包头解析结果对所述数据包中的包体进行解析,获得所述响应结构体。
3.根据权利要求2所述的方法,其特征在于,所述注册信息还包括读包长度函数,所述方法还包括:
调用所述读包长度函数,获得第一长度参数;
在接收所述被调用方所发送数据包的过程中,若所接收到数据包的大小达到所述第一长度参数所指示大小,则执行所述调用所述包头解析函数对所述数据包中的包头进行解析,获得包头解析结果的步骤。
4.根据权利要求2或3所述的方法,其特征在于,所述包头解析结果包括第二长度参数,所述调用所述包体解析函数根据所述包头解析结果对所述数据包中的包体进行解析,获得所述响应结构体,包括:
根据所述第二长度参数判断所接收到数据包的大小是否达到所述第二长度参数所指示的大小;
若达到,则调用所述包体解析函数对所接收到数据包中的包体进行解析,获得所述响应结构体。
5.根据权利要求1所述的方法,其特征在于,所述将所述第一二进制流发送至所述服务标识所对应的被调用方之前,所述方法还包括:
获取所述调用方对应的路由指示信息;
在所述RPC框架所配置的路由方式中确定所述路由指示信息所指示的路由方式;
所述将所述第一二进制流发送至所述服务标识所对应的被调用方,包括:
按照所述路由指示信息所指示的路由方式将所述第一二进制流发送至所述服务标识所对应的被调用方。
6.根据权利要求1所述的方法,其特征在于,所述方法还包括:
获取所述调用方对应的响应指示信息;
所述接收所述调用方发起的调用请求之后,所述方法还包括:
按照所述响应指示信息所指示的响应方式对所述调用请求进行响应。
7.根据权利要求1所述的方法,其特征在于,所述RPC框架包括回调函数设置接口,所述方法还包括:
接收通过所述回调函数设置接口为所述调用方传送的注册信息;
在所述RPC框架中按照所述注册信息进行协议注册。
8.一种服务调用装置,应用于RPC框架,其特征在于,所述装置包括:
调用请求接收模块,用于在调用方在所述RPC框架上通过注册信息进行协议注册后,接收所述调用方发起的调用请求,所述调用请求包括请求内容和服务标识,所述注册信息包括组包函数和解析函数;
组包函数调用模块,用于通过所述调用方所注册的组包函数对所述请求内容进行序列化,得到第一二进制流;
二进制流发送模块,用于将所述第一二进制流发送至所述服务标识所对应的被调用方;
数据包接收模块,用于接收所述被调用方返回的数据包,所述被调用方调用所述服务标识所指示的服务根据所述第一二进制流所指示的参数进行运算后,得到运算结果,并根据所述运算结果生成所述数据包;
解析函数调用模块,用于调用所述调用方所注册的解析函数对所述数据包进行反序列化,得到响应结构体;
响应结构体发送模块,用于将所述响应结构体发送至所述调用方,所述调用方根据所述响应结构体获得所述运算结果。
9.一种电子设备,其特征在于,包括:
处理器;以及
存储器,所述存储器上存储有计算机可读指令,所述计算机可读指令被所述处理器执行时,实现如权利要求1-7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可读指令,所述计算机可读指令被处理器执行时,实现如权利要求1-7中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010272948.8A CN113495796A (zh) | 2020-04-08 | 2020-04-08 | 服务调用方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010272948.8A CN113495796A (zh) | 2020-04-08 | 2020-04-08 | 服务调用方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN113495796A true CN113495796A (zh) | 2021-10-12 |
Family
ID=77994816
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010272948.8A Pending CN113495796A (zh) | 2020-04-08 | 2020-04-08 | 服务调用方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113495796A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114285906A (zh) * | 2021-12-24 | 2022-04-05 | 北京天融信网络安全技术有限公司 | 报文处理方法、装置、电子设备及存储介质 |
CN115858206A (zh) * | 2023-02-27 | 2023-03-28 | 联宝(合肥)电子科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
-
2020
- 2020-04-08 CN CN202010272948.8A patent/CN113495796A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114285906A (zh) * | 2021-12-24 | 2022-04-05 | 北京天融信网络安全技术有限公司 | 报文处理方法、装置、电子设备及存储介质 |
CN114285906B (zh) * | 2021-12-24 | 2024-01-23 | 北京天融信网络安全技术有限公司 | 报文处理方法、装置、电子设备及存储介质 |
CN115858206A (zh) * | 2023-02-27 | 2023-03-28 | 联宝(合肥)电子科技有限公司 | 数据处理方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109857515B (zh) | 桥接通信方法、装置、设备及计算机可读存储介质 | |
CN111176626B (zh) | 跨编程语言的代码调用方法及装置、介质、设备 | |
CN110377438B (zh) | 跨进程通信接口的路由方法、装置和系统 | |
CN109815025B (zh) | 一种业务模型调用方法、装置及存储介质 | |
CN110457144B (zh) | 一种实现前端应用的方法、装置、介质和设备 | |
CN111290806B (zh) | 应用程序接口的调用方法、装置、计算机设备及存储介质 | |
CN113495796A (zh) | 服务调用方法及相关设备 | |
CN109343975B (zh) | 用于页面间异步通信的方法和装置 | |
CN112688915A (zh) | 跨协议通信方法、装置及服务器 | |
CN111580988A (zh) | 开放平台的实现方法、装置、存储介质和计算机设备 | |
CN110928545B (zh) | 组件分发方法、单页应用的开发方法、装置及存储介质 | |
CN109725887B (zh) | 基于消息研发框架的数据交互方法、装置及终端设备 | |
CN110377273B (zh) | 一种数据处理的方法、装置、介质和电子设备 | |
CN112015384A (zh) | 一种接口映射方法和装置 | |
CN112417797B (zh) | 寄存器配置同步方法、验证平台系统及配置方法、装置 | |
CN116781586A (zh) | 一种gRPC流量解析方法、装置、设备及介质 | |
WO2023083071A1 (zh) | 视图交互方法、装置、电子设备及计算机可读介质 | |
CN113535419A (zh) | 一种服务编排方法和装置 | |
US20220245080A1 (en) | Method for communication of a componentized application, computing device and computer storage medium | |
CN115374207A (zh) | 业务处理方法及装置、电子设备和计算机可读存储介质 | |
CN113760490B (zh) | 对微服务处理的方法、装置、电子设备及存储介质 | |
CN114301970A (zh) | 服务调用方法、装置、电子设备及存储介质 | |
CN109669720B (zh) | 基于Promise的链式异步请求处理方法、装置及电子设备 | |
CN113761871A (zh) | 富文本渲染方法、装置、电子设备以及存储介质 | |
CN107450946B (zh) | Chrome网页与终端软件通讯方法、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |