CN112328410B - 远程过程调用的实现方法、装置、设备及存储介质 - Google Patents

远程过程调用的实现方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN112328410B
CN112328410B CN202011215619.6A CN202011215619A CN112328410B CN 112328410 B CN112328410 B CN 112328410B CN 202011215619 A CN202011215619 A CN 202011215619A CN 112328410 B CN112328410 B CN 112328410B
Authority
CN
China
Prior art keywords
rpc
logic
cooperative
coroutine
execution result
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.)
Active
Application number
CN202011215619.6A
Other languages
English (en)
Other versions
CN112328410A (zh
Inventor
杨尚明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Netease Hangzhou Network Co Ltd
Original Assignee
Netease Hangzhou Network Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Netease Hangzhou Network Co Ltd filed Critical Netease Hangzhou Network Co Ltd
Priority to CN202011215619.6A priority Critical patent/CN112328410B/zh
Publication of CN112328410A publication Critical patent/CN112328410A/zh
Application granted granted Critical
Publication of CN112328410B publication Critical patent/CN112328410B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

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,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。

Description

远程过程调用的实现方法、装置、设备及存储介质
技术领域
本发明实施例涉及网络技术领域,尤其涉及一种远程过程调用的实现方法、装置、设备及存储介质。
背景技术
很多大型网游的核心业务逻辑通过lpc语言实现,由于lpc是一个单进程单线程结构,不能进行计算量特别高的运算,而大型网游的业务逻辑较辅助,因此大型网游的服务端架构中不仅包括用于实现核心业务逻辑的lpc服务器引擎,还包括网关(gate)和附属节点(例如,用python语言实现的stateless服务的节点)。gate网关作为连接客户端和附属节点以及lpc服务器引擎的中介。python有非常丰富的官方以及第三方库,新增了基于python的附属节点作为lpc服务器引擎的扩展节点,提供一些辅助性的功能,比如聊天系统,邮件系统,提供访问数据库的功能,另外运算量大的逻辑也可放到附属节点中实现,可以提高网游的运行稳定性和性能。
当在附属节点编写逻辑时,经常会遇到需要调用服务器引擎提供的lpc接口的远程过程调用(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参数;
RPC模块,用于通过RPC协程根据所述RPC参数生成RPC包,将所述RPC包发送给所述服务器引擎,调度所述逻辑协程在发起所述RPC请求的位置挂起;
所述RPC模块还用于通过所述RPC协程获取所述服务器引擎返回的执行结果,唤醒所述逻辑协程,并将所述执行结果传递给所述逻辑协程;
所述逻辑协程模块还用于通过所述逻辑协程根据执行结果,从所述发起所述RPC请求的位置继续运行业务逻辑。
第四方面,本发明实施例提供一种远程过程调用的实现装置,应用于服务器引擎,包括:
请求参数获取模块,用于获取附属节点发送的RPC包,所述RPC包至少包括RPC参数;
执行模块,用于根据所述RPC参数调用对应的目标函数,得到执行结果;
执行结果返回模块,用于将所述执行结果发送给所述附属节点。
第五方面,本发明实施例提供一种服务器引擎的附属节点,包括:
处理器,存储器,以及存储在所述存储器上并可在所述处理器上运行的计算机程序;
其中,所述处理器运行所述计算机程序时实现上述第一方面所述的方法。
第六方面,本发明实施例提供一种服务器引擎,包括:
处理器,存储器,以及存储在所述存储器上并可在所述处理器上运行的计算机程序;
其中,所述处理器运行所述计算机程序时实现上述第二方面所述的方法。
第七方面,本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面或者第二方面所述的方法。
本发明实施例提供的远程过程调用的实现方法、装置、设备及存储介质,通过利用协程调度机制,在调用RPC时,逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。
附图说明
图1为本发明实施例提供的一种服务器架构的示意图;
图2为本发明实施例其中之一提供的远程过程调用的实现方法流程图;
图3为本发明实施例其中之一提供的远程过程调用的实现方法流程图;
图4为本发明实施例其中之一提供的发起RPC的大致流程示意图;
图5为本发明实施例其中之一提供的获取执行结果并唤醒逻辑协程的大致流程示意图;
图6为本发明实施例其中之一提供的远程过程调用的装置的结构示意图;
图7为本发明实施例其中之一提供的远程过程调用的装置的结构示意图;
图8为本发明实施例其中之一提供的附属节点的结构示意图;
图9为本发明实施例其中之一提供的服务器引擎的结构示意图。
通过上述附图,已示出本发明明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本发明构思的范围,而是通过参考特定实施例为本领域技术人员说明本发明的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本发明相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本发明的一些方面相一致的装置和方法的例子。
首先对本发明实施例所涉及的术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
本发明实施例具体应用于如图1所示的服务器架构,如图1所示,该服务器架构通常由网关(gate),附属节点(stateless)和服务器引擎三类节点构成。其中,附属节点和服务器引擎均可以采用集群的方式,也即附属节点和服务器引擎均可以包含多个节点。该服务器架构可以应用于大型网游(例如梦幻西游系列游戏的网页版)的服务端架构。服务器引擎可以基于lpc语言实现,游戏玩法相关的核心逻辑都位于服务器引擎,gate网关作为连接客户端和附属节点stateless以及服务器引擎的中介,实现附属节点与服务器引擎之间通过消息队列(例如redis)的数据交互。由于lpc标准库所提供的功能非常的有限,此外lpc是一个单进程单线程结构,不能进行计算量特别高的运算,所以新增了stateless节点作为服务器引擎的扩展节点,提供一些辅助性的功能,比如聊天系统,邮件系统,提供访问redis和mongodb等数据库的功能等,其他运算量大的逻辑也可放到stateless。附属节点采用python语言实现,python有非常丰富的官方以及第三方库,通过多个逻辑协程运行业务逻辑。
当在stateless编写逻辑时,经常会遇到需要调用服务器引擎提供的lpc接口的情况,目前通常采用异步的方法来实现RPC。但在实际开发中每发起一次异步RPC就需要将逻辑拆成调用和回调两个部分,如果嵌套或调用多个异步RPC则更加复杂,会大大提高代码编写难度和出错率,并且代码也不好阅读和维护。
本发明实施例提供的远程过程调用的实现方法,旨在解决现有技术的如上技术问题。
另外,该服务器架构还可以应用于其他业务逻辑较为复杂的业务系统的服务端架构,本实施例此处不再赘述。
下面以具体地实施例对本发明的技术方案以及本申请的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明的实施例进行描述。
图2为本发明实施例提供的一种远程过程调用的实现方法流程图。本发明实施例针对现有大型网游服务器架构中的RPC方法导致大型网游的开发效率低,且代码的可读性和可维护性较差的问题,提供了远程过程调用的实现方法。如图2所示,该方法具体步骤如下:
步骤S101、附属节点通过逻辑协程运行业务逻辑的过程中,若需要调用服务器引擎的目标函数时,通过逻辑协程发起RPC请求,RPC请求包含RPC参数。
本实施例中,附属节点可以运行一个或者多个逻辑协程以及RPC协程,通过逻辑协程运行业务逻辑,通过RPC协程实现同步RPC。
逻辑协程运行业务逻辑的过程中,当需要调用服务器引擎的目标函数时,发起RPC请求。该RPC请求至少包括RPC参数。
其中,RPC参数包括调用服务器引擎的目标函数所需的参数。RPC参数可以包括模块名,函数名,函数参数,超时时间等。
步骤S102、附属节点通过RPC协程根据RPC参数生成RPC包,将RPC包发送给服务器引擎,调度逻辑协程在发起RPC请求的位置挂起。
RPC协程能够将逻辑协程发起RPC请求的相关数据进行序列化打包,生成RPC包,并将RPC包发送给服务器引擎,使得服务器引擎根据RPC包执行对应的目标函数并返回执行结果。
在将RPC包发送给服务器引擎之后,RPC协程利用协程调度机制使得逻辑协程在发起RPC请求的位置挂起,从而让出CPU调度,避免CPU资源浪费。
步骤S103、服务器引擎获取附属节点发送的RPC包,RPC包至少包括RPC参数。
服务器引擎获取到附属节点通过RPC协程发送的RPC包之后,通过反序列化解析RPC包,得到其中的RPC参数。
步骤S104、服务器引擎根据RPC参数调用对应的目标函数,得到执行结果。
在得到RPC参数之后,服务器引擎根据RPC参数执行对应的目标函数,得到执行结果。
步骤S105、服务器引擎将执行结果发送给附属节点。
在得到目标函数的执行结果之后,服务器引擎将执行结果发送给附属节点。
步骤S106、附属节点通过RPC协程获取服务器引擎返回的执行结果,唤醒逻辑协程,并将执行结果传递给逻辑协程。
附属节点通过RPC协程获取服务器引擎返回的执行结果。
在拿到目标函数的执行结果之后,RPC协程唤醒发起RPC请求的逻辑协程,并将执行结果传递给该逻辑协程。
步骤S107、附属节点通过逻辑协程根据执行结果,从发起RPC请求的位置继续运行业务逻辑。
逻辑协程在得到目标函数的执行结果之后,从发起RPC请求的位置继续运行业务逻辑。
本发明实施例中,附属节点中,通过逻辑协程运行业务逻辑的过程中,若需要调用服务器引擎的目标函数时,通过逻辑协程发起RPC请求,RPC请求包含RPC参数;通过RPC协程根据RPC参数生成RPC包,将RPC包发送给服务器引擎,调度逻辑协程在发起RPC请求的位置挂起。服务器引擎获取附属节点发送的RPC包,根据RPC包中的RPC参数调用对应的目标函数,得到执行结果,并将执行结果发送给附属节点。附属节点通过RPC协程获取服务器引擎返回的执行结果,唤醒逻辑协程,并将执行结果传递给逻辑协程;通过逻辑协程根据执行结果,从发起RPC请求的位置继续运行业务逻辑。通过利用协程调度机制,在调用RPC时,逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。
图3为本发明实施例提供的另一种远程过程调用的实现方法流程图。在上述实施例的基础上,本实施例中,每个附属节点和服务器引擎均有对应的消息队列,附属节点和服务器引擎之间通过消息队列进行数据交互,调用方和被调用方的解耦,这样可以方便地加入新的附属节点和服务器引擎,便于扩展。本发明实施例中,以应用于大型网游(例如梦幻西游系列游戏的网页版)的服务端架构为例,进行示例性地说明。
如图3所示,该方法具体步骤如下:
步骤S200、附属节点启动时,启动逻辑协程和RPC协程。
在附属节点(stateless)启动时,启动一个或者多个逻辑协程和一个RPC协程。通过逻辑协程运行业务逻辑,通过RPC协程实现同步RPC。
本实施例可以基于第三方协程库(例如gevent)的协程调度机制来实现。
步骤S201、通过逻辑协程运行业务逻辑的过程中,若需要调用服务器引擎的目标函数时,通过逻辑协程调用RPC协程的RPC接口,并传入RPC参数。
其中,目标函数可以是服务器引擎中的任一模块中的任一函数,此处指代逻辑协程想要调用的那个函数。
逻辑协程在运行业务逻辑的过程中,在需要调用服务器引擎的某个模块的某个函数时,可以发起RPC请求。
具体地,逻辑协程可以调用RPC协程的RPC接口,并传入RPC参数。
其中,RPC参数包括调用服务器引擎的目标函数所需的参数。RPC参数至少包括模块名,函数名,函数参数等。
另外,RPC参数还可以包括超时时间,也即由逻辑协程自主设定超时时间。
可选地,超时时间还可以由RPC协程根据配置设定。
步骤S202、通过RPC协程生成本次RPC的唯一标识,将RPC参数及唯一标识打包生成RPC包,将RPC包发送到服务器引擎对应的第一消息队列。
本实施例中,RPC协程可以生成本次RPC的唯一标识。在获取到目标函数的执行结果之后,通过该唯一标识能够找到发起RPC请求的逻辑协程,从而自动唤醒对应逻辑协程,并向其传递执行结果。例如,RPC的唯一标识可以是唯一的ID。
在生成本次RPC的唯一标识之后,RPC协程将RPC参数及唯一标识进行序列化,打包生成RPC包。
示例性地,RPC协程可以利用msgpack库,将RPC参数及唯一标识序列化,得到RPC包。例如,RPC包可以是序列化得到的二进制序列。
本实施例中,通过消息队列的方式实现附属节点和服务器引擎之间的数据交互。附属节点和服务器引擎都拥有自己的消息队列。本实施例中,第一消息队列指代服务器引擎对应的消息队列,第二消息队列指代附属节点对应的消息队列。
该步骤中,RPC协程将RPC包发送到服务器引擎对应的第一消息队列,即可将RPC包发送给服务器引擎。
示例性地,服务器引擎对应的第一消息队列可以是redis的一个列表,这种方式部署简单。其中redis的列表中key值用于记录消息队列所属的服务器引擎的标识,value值用于记录RPC包等交互的数据。
步骤S203、通过RPC协程生成异步结果对象,将异步结果对象与本次RPC的唯一标识关联,调用异步结果对象的设置数据接口,使得逻辑协程挂起。
本实施例中,为例实现逻辑协程的挂起和唤醒,RPC协程利用第三方协程库生成本次RPC的异步结果对象,并将本次RPC的异步结果对象与本次RPC的唯一标识关联并保存起来。
其中,设置数据接口可以是第三方协程库提供的用于挂起协程的接口。例如,可以是gevent中AsyncResult的get接口。
RPC协程通过调用本次RPC的异步结果对象的设置数据接口使得逻辑协程让出CPU调度,逻辑协程挂起。
例如,第三方协程库可以用gevent。该步骤中,RPC协程生成一个AsyncResult(是gevent中用于保存异步结果的对象),并将AsyncResult与本次RPC的唯一标识关联并保存起来,通过调用AsyncResult的get接口,使得逻辑协程让出CPU调度。
步骤S204、通过RPC协程设置超时时间。
本实施例中,在逻辑协程让出CPU调度时,设置超时时间。
可选地,逻辑协程提供的RPC参数中可以包括超时时间。RPC协程根据RPC参数中的超时时间进行设置。
可选地,若逻辑协程提供的RPC参数中可以包括超时时间,RPC协程可以根据自行设置超时时间。例如,可以根据预先配置好的超时时间进行设置,或者可以根据逻辑协程处理业务逻辑的及时性要求,灵活地设定超时时间。
RPC协程监控所在附属节点对应的第二消息队列,等待获取RPC回包。
如果等待时长大于超时时间时,还未获取服务器引擎返回的执行结果,则RPC协程执行步骤S211。如果等待时长在大于超时时间之前,已经获取到服务器引擎返回的执行结果,则RPC协程执行步骤S208。
步骤S205、服务器引擎从对应的第一消息队列中取出RPC包,解析RPC包得到本次RPC的唯一标识和RPC参数。
服务器引擎监控器对应的第一消息队列,可以从其对应的第一消息队列中取RPC包,然后通过反序列化解析RPC包,得到本次RPC的唯一标识和RPC参数。
该步骤中,反序列化解析RPC包的方法与上述步骤中序列化打包生成RPC包的方法对应。
示例性地,若RPC协程可以利用msgpack库,将RPC参数及唯一标识序列化,得到RPC包。该步骤中,服务器引擎可以利用msgpack库,将RPC包反序列化,得到本次RPC的唯一标识和RPC参数。
步骤S206、服务器引擎根据RPC参数调用对应的目标函数,得到执行结果。
在获取到RPC包中的RPC参数之后,根据RPC参数中的模块名、函数名、函数参数等,调用对应的目标函数,得到执行结果。
步骤S207、服务器引擎将执行结果和唯一标识打包生成RPC回包,将RPC回包发送到附属节点对应的第二消息队列。
在得到目标函数的执行结果之后,服务器引擎将执行结果和唯一标识打包生成RPC回包,并将RPC回包发送到附属节点对应的第二消息队列,即可将执行结果发送给附属节点。
示例性地,附属节点对应的第二消息队列也可以是redis的一个列表,这种方式部署简单。其中redis的列表中key值用于记录消息队列所属的附属节点的标识,value值用于记录RPC回包等交互的数据。
该步骤中,服务器引擎可以将执行结果和唯一标识序列化,生成RPC回包,与步骤S202中生成RPC包的实现方式一致,本实施例此处不再赘述。
步骤S208、通过RPC协程从第二消息队列中取出RPC回包,解析RPC回包,得到唯一标识和执行结果。
RPC协程从第二消息队列中取出RPC回包,然后通过反序列化解析RPC回包,得到本次RPC的唯一标识和执行结果。
该步骤中,RPC协程解析RPC回包的过程,与步骤S205中服务器引擎解析RPC包的实现方式一致,本实施例此处不再赘述。
步骤S209、通过RPC协程获取与唯一标识关联的异步结果对象,调用异步结果对象的获取数据接口,并传入执行结果,唤醒逻辑协程,并将执行结果传递到逻辑协程。
其中,获取数据接口可以是第三方协程库提供的用于唤醒协程的接口。例如,可以是gevent中AsyncResult的set接口。
在得到目标函数的执行结果之后,RPC协程根据本次RPC的唯一标识,获取与唯一标识关联的异步结果对象。然后通过调用异步结果对象的获取数据接口并传入执行结果,即可唤醒对应的逻辑协程。
例如,步骤S203中,RPC协程生成一个AsyncResult(是gevent中用于保存异步结果的对象),并将AsyncResult与本次RPC的唯一标识关联并保存起来,通过调用AsyncResult的get接口,使得逻辑协程让出CPU调度。该步骤中,RPC协程通过调用AsyncResult的set接口并传入执行结果,来唤醒逻辑协程,并将执行结果传递到逻辑协程。
步骤S210、通过逻辑协程获取RPC接口返回值,得到执行结果。
逻辑协程在被唤醒之后,通过RPC接口返回值得到执行结果。
步骤S211、若等待时长大于超时时间时,还未获取服务器引擎返回的执行结果,则通过RPC协程将执行结果设置为空值,唤醒逻辑协程,并将执行结果传递给逻辑协程。
本实施例中,在逻辑协程让出CPU调度时,设置超时时间。
在实际应用中,可能由于附属节点与服务器引擎之间的网络出现问题,或者服务器引擎执行目标函数出错等原因,会造成服务器引擎不能顺利把目标函数的执行结果传回到附属节点。这样,在逻辑协程让出CPU调度之后,在等待时长大于超时时间时,RPC协程可能还未获取服务器引擎返回的执行结果。
如果在逻辑协程让出CPU调度之后,若等待时长大于超时时间时,RPC协程还未获取服务器引擎返回的执行结果,RPC协程采用步骤S209相同的方式,唤醒逻辑协程,但是传递到逻辑协程执行结果为空值。
示例性地,步骤S203中,RPC协程生成一个AsyncResult(是gevent中用于保存异步结果的对象),并将AsyncResult与本次RPC的唯一标识关联并保存起来,通过调用AsyncResult的get接口,使得逻辑协程让出CPU调度。该步骤中,如果等待时长大于超时时间时,RPC协程还未获取服务器引擎返回的执行结果,RPC协程通过调用AsyncResult的set接口并传入空值,来唤醒逻辑协程。
步骤S212、通过逻辑协程根据执行结果,从发起RPC请求的位置继续运行业务逻辑。
在被唤醒之后,逻辑协程根据执行结果,从发起RPC请求的位置继续执行后续代码,运行业务逻辑,至此一个完整的RPC调用完成。
例如,如图4和图5所示,以lpc指代基于lpc语言实现的服务器引擎,以stateless指代附属节点,以协程X指代stateless上发起RPC的逻辑协程,消息队列以redis中的列表的方式实现。图4中给出了附属节点通过逻辑协程和RPC协程向服务器引擎发起RPC的大致过程,如图4所示,在需要时,协程X发起RPC请求,由RPC协程将RPC请求中的RPC参数打包并发送到redis中lpc对应的第一消息队列中;lpc监控redis,等待RPC回包。如图5所示,lpc会将RPC回包发送到stateless对应的第二消息队列中,lpc从第二消息队列中获取RPC回包,然后反序列化包,唤醒协程X,把执行结果传递给协程X,协程X拿到执行结果后从上次发起RPC请求的代码位置继续执行业务逻辑。
本发明实施例通过利用协程调度机制,将RPC底层异步的实现封装成同步的接口,在调用RPC时逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本;进一步地,发起同步RPC调用时利用协程调度机制,不会造成CPU的浪费;进一步地,通过消息队列实现调用方(附属节点)和被调用方(服务器引擎)之间的数据交互,实现调用方和被调用方的解耦,这样可以方便地加入新的附属节点和服务器引擎,便于扩展。
图6为本发明实施例提供的远程过程调用的装置的结构示意图。本发明实施例提供的远程过程调用的装置可以执行远程过程调用的方法实施例提供的处理流程。该装置应用于附属节点。如图6所示,该远程过程调用的装置30包括:逻辑协程模块301和RPC模块302。
具体地,逻辑协程模块301用于通过逻辑协程运行业务逻辑的过程中,若需要调用服务器引擎的目标函数时,通过逻辑协程发起RPC请求,RPC请求包含RPC参数。
RPC模块302用于通过RPC协程根据RPC参数生成RPC包,将RPC包发送给服务器引擎,调度逻辑协程在发起RPC请求的位置挂起。
RPC模块302还用于通过RPC协程获取服务器引擎返回的执行结果,唤醒逻辑协程,并将执行结果传递给逻辑协程。
逻辑协程模块301还用于通过逻辑协程根据执行结果,从发起RPC请求的位置继续运行业务逻辑。
本发明实施例提供的装置可以具体用于执行上述图2对应实施例中附属节点所执行的方法流程,具体功能此处不再赘述。
本发明实施例通过利用协程调度机制,在调用RPC时,逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。
在上一实施例的基础上,本实施例中,逻辑协程模块还用于:
通过逻辑协程调用RPC协程的RPC接口,并传入RPC参数。
在一种可选地实施方式中,RPC模块还用于:
通过RPC协程生成异步结果对象,将异步结果对象与本次RPC的唯一标识关联,调用异步结果对象的设置数据接口,使得逻辑协程挂起。
在一种可选地实施方式中,RPC模块还用于:
通过RPC协程获取与唯一标识关联的异步结果对象,调用异步结果对象的获取数据接口,并传入执行结果,唤醒逻辑协程;通过逻辑协程获取RPC接口返回值,得到执行结果。
在一种可选地实施方式中,RPC模块还用于:
通过RPC协程生成本次RPC的唯一标识,将RPC参数及唯一标识打包生成RPC包,将RPC包发送到服务器引擎对应的第一消息队列。
在一种可选地实施方式中,RPC模块还用于:
通过RPC协程从第二消息队列中取出RPC回包,解析RPC回包,得到唯一标识和执行结果,其中第二消息队列为附属节点对应的消息队列。
在一种可选地实施方式中,RPC模块还用于:
通过RPC协程设置超时时间,若等待时长大于超时时间时,还未获取服务器引擎返回的执行结果,则将执行结果设置为空值,唤醒逻辑协程,并将执行结果传递给逻辑协程。
本发明实施例提供的装置可以具体用于执行上述图3对应实施例中附属节点所执行的方法流程,具体功能此处不再赘述。
本发明实施例通过利用协程调度机制,将RPC底层异步的实现封装成同步的接口,在调用RPC时逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本;进一步地,发起同步RPC调用时利用协程调度机制,不会造成CPU的浪费;进一步地,通过消息队列实现调用方(附属节点)和被调用方(服务器引擎)之间的数据交互,实现调用方和被调用方的解耦,这样可以方便地加入新的附属节点和服务器引擎,便于扩展。
图7为本发明实施例提供的远程过程调用的装置的结构示意图。本发明实施例提供的远程过程调用的装置可以执行远程过程调用的方法实施例提供的处理流程。该装置应用于服务器引擎。如图7所示,该远程过程调用的装置40包括:请求参数获取模块401,执行模块402和执行结果返回模块403。
具体地,请求参数获取模块401用于获取附属节点发送的RPC包,RPC包至少包括RPC参数。
执行模块402用于根据RPC参数调用对应的目标函数,得到执行结果。
执行结果返回模块403用于将执行结果发送给附属节点。
本发明实施例提供的装置可以具体用于执行上述图2对应实施例中服务器引擎所执行的方法流程,具体功能此处不再赘述。
本发明实施例通过利用协程调度机制,在调用RPC时,逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。
在上一实施例的基础上,本实施例中,请求参数获取模块还用于:
从对应的第一消息队列中取出RPC包,解析RPC包得到本次RPC的唯一标识和RPC参数。
在一种可选地实施方式中,执行结果返回模块还用于:
将执行结果和唯一标识打包生成RPC回包,将RPC回包发送到附属节点对应的第二消息队列。
本发明实施例提供的装置可以具体用于执行上述图3对应实施例中服务器引擎所执行的方法流程,具体功能此处不再赘述。
本发明实施例通过利用协程调度机制,将RPC底层异步的实现封装成同步的接口,在调用RPC时逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本;进一步地,发起同步RPC调用时利用协程调度机制,不会造成CPU的浪费;进一步地,通过消息队列实现调用方(附属节点)和被调用方(服务器引擎)之间的数据交互,实现调用方和被调用方的解耦,这样可以方便地加入新的附属节点和服务器引擎,便于扩展。
图8为本发明实施例提供的附属节点的结构示意图。如图8所示,该附属节点100包括:处理器1001,存储器1002,以及存储在存储器1002上并可在处理器1001上运行的计算机程序。
其中,处理器1001运行计算机程序时实现上述任一方法实施例中附属节点所执行的方法流程。
本发明实施例通过利用协程调度机制,在调用RPC时,逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。
图9为本发明实施例提供的服务器引擎的结构示意图。如图9所示,该服务器引擎110包括:处理器1101,存储器1102,以及存储在存储器1102上并可在处理器1101上运行的计算机程序。
其中,处理器1101运行计算机程序时实现上述任一方法实施例中服务器引擎所执行的方法流程。
本发明实施例通过利用协程调度机制,在调用RPC时,逻辑协程会主动让出调度,并在拿到RPC调用结果后自动唤醒并继续执行业务逻辑,用同步RPC代替异步RPC,使得开发人员可以在写代码时忽略RPC底层的异步实现,用同步RPC的写法来编写业务逻辑,保证了思维的连贯性和代码的可读性和可维护性,大大降低了编码复杂度以及调试难度,提高了开发效率,降低了维护成本。
另外,本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质中存储有计算机程序,计算机程序被处理器执行时实现上述任一方法实施例中附属节点或者服务器引擎所执行的方法流程。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本发明的其它实施方案。本发明旨在涵盖本发明的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本发明的一般性原理并包括本发明未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本发明的真正范围和精神由下面的权利要求书指出。
应当理解的是,本发明并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本发明的范围仅由所附的权利要求书来限制。

Claims (10)

1.一种远程过程调用的实现方法,其特征在于,应用于附属节点,包括:
通过逻辑协程运行业务逻辑的过程中,若需要调用服务器引擎的目标函数时,通过所述逻辑协程发起RPC请求,所述RPC请求包含RPC参数;
通过RPC协程根据所述RPC参数生成RPC包,将所述RPC包发送给所述服务器引擎,调度所述逻辑协程在发起所述RPC请求的位置挂起;
通过所述RPC协程获取所述服务器引擎返回的执行结果,唤醒所述逻辑协程,并将所述执行结果传递给所述逻辑协程;
通过所述逻辑协程根据执行结果,从所述发起所述RPC请求的位置继续运行业务逻辑。
2.根据权利要求1所述的方法,其特征在于,通过所述逻辑协程发起RPC请求,包括:
通过所述逻辑协程调用RPC协程的RPC接口,并传入所述RPC参数。
3.根据权利要求2所述的方法,其特征在于,调度所述逻辑协程在发起所述RPC请求的位置挂起,包括:
通过所述RPC协程生成异步结果对象,将所述异步结果对象与本次RPC的唯一标识关联,调用所述异步结果对象的设置数据接口,使得所述逻辑协程挂起。
4.根据权利要求3所述的方法,其特征在于,唤醒所述逻辑协程,并将所述执行结果传递给所述逻辑协程,包括:
通过所述RPC协程获取与所述唯一标识关联的异步结果对象,调用所述异步结果对象的获取数据接口,并传入所述执行结果,唤醒所述逻辑协程;
通过所述逻辑协程获取所述RPC接口返回值,得到所述执行结果。
5.根据权利要求3所述的方法,其特征在于,通过RPC协程根据所述RPC参数生成RPC包,将所述RPC包发送给所述服务器引擎,包括:
通过所述RPC协程生成本次RPC的唯一标识,将所述RPC参数及所述唯一标识打包生成RPC包,将所述RPC包发送到所述服务器引擎对应的第一消息队列。
6.根据权利要求5所述的方法,其特征在于,通过所述RPC协程获取所述服务器引擎返回的执行结果,包括:
通过所述RPC协程从第二消息队列中取出RPC回包,解析所述RPC回包,得到所述唯一标识和执行结果,其中第二消息队列为所述附属节点对应的消息队列。
7.根据权利要求1至6中任一项所述的方法,其特征在于,通过RPC协程调度所述逻辑协程在发起所述RPC请求的位置挂起之后,还包括:
通过RPC协程设置超时时间,若等待时长大于所述超时时间时,还未获取所述服务器引擎返回的执行结果,则将执行结果设置为空值,唤醒所述逻辑协程,并将所述执行结果传递给所述逻辑协程。
8.一种远程过程调用的实现装置,其特征在于,应用于附属节点,包括:
逻辑协程模块,用于通过逻辑协程运行业务逻辑的过程中,若需要调用服务器引擎的目标函数时,通过所述逻辑协程发起RPC请求,所述RPC请求包含RPC参数;
RPC模块,用于通过RPC协程根据所述RPC参数生成RPC包,将所述RPC包发送给所述服务器引擎,调度所述逻辑协程在发起所述RPC请求的位置挂起;
所述RPC模块还用于通过所述RPC协程获取所述服务器引擎返回的执行结果,唤醒所述逻辑协程,并将所述执行结果传递给所述逻辑协程;
所述逻辑协程模块还用于通过所述逻辑协程根据执行结果,从所述发起所述RPC请求的位置继续运行业务逻辑。
9.一种服务器引擎的附属节点,其特征在于,包括:
处理器,存储器,以及存储在所述存储器上并可在所述处理器上运行的计算机程序;
其中,所述处理器运行所述计算机程序时实现如权利要求1至7中任一项所述的方法。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至7中任一项所述的方法。
CN202011215619.6A 2020-11-04 2020-11-04 远程过程调用的实现方法、装置、设备及存储介质 Active CN112328410B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011215619.6A CN112328410B (zh) 2020-11-04 2020-11-04 远程过程调用的实现方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011215619.6A CN112328410B (zh) 2020-11-04 2020-11-04 远程过程调用的实现方法、装置、设备及存储介质

Publications (2)

Publication Number Publication Date
CN112328410A CN112328410A (zh) 2021-02-05
CN112328410B true CN112328410B (zh) 2023-08-08

Family

ID=74323521

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011215619.6A Active CN112328410B (zh) 2020-11-04 2020-11-04 远程过程调用的实现方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN112328410B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114398179B (zh) * 2022-01-14 2023-03-14 北京思明启创科技有限公司 一种跟踪标识的获取方法、装置、服务器及存储介质
CN114584500B (zh) * 2022-02-25 2024-03-22 网易(杭州)网络有限公司 异步通信的测试方法、装置及电子设备

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103885973A (zh) * 2012-12-21 2014-06-25 中国科学院声学研究所 一种基于Web引擎的远程过程调用系统及实现方法
CN107147641A (zh) * 2017-05-10 2017-09-08 深圳市万游引力科技有限公司 一种信息处理方法、系统及计算机存储介质
CN107479985A (zh) * 2017-06-30 2017-12-15 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
CN108255727A (zh) * 2018-01-18 2018-07-06 网易(杭州)网络有限公司 数据接收、发送方法及装置,测试系统,存储介质
WO2019001074A1 (zh) * 2017-06-30 2019-01-03 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
CN109257411A (zh) * 2018-07-31 2019-01-22 平安科技(深圳)有限公司 一种业务处理方法、调用管理系统和计算机设备
CN109542935A (zh) * 2018-10-11 2019-03-29 平安科技(深圳)有限公司 一种规则引擎的执行方法、存储介质和服务器
CN109815025A (zh) * 2018-12-17 2019-05-28 顺丰科技有限公司 业务模型调用方法、装置及存储介质
CN110825455A (zh) * 2019-10-31 2020-02-21 郑州悉知信息科技股份有限公司 一种应用程序运行方法、装置和系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11455175B2 (en) * 2018-07-16 2022-09-27 Microsoft Technology Licensing, Llc Transparently remote execution of development tool extensions

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103885973A (zh) * 2012-12-21 2014-06-25 中国科学院声学研究所 一种基于Web引擎的远程过程调用系统及实现方法
CN107147641A (zh) * 2017-05-10 2017-09-08 深圳市万游引力科技有限公司 一种信息处理方法、系统及计算机存储介质
CN107479985A (zh) * 2017-06-30 2017-12-15 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
WO2019001074A1 (zh) * 2017-06-30 2019-01-03 武汉斗鱼网络科技有限公司 一种远程过程调用的方法、装置及计算机设备
CN108255727A (zh) * 2018-01-18 2018-07-06 网易(杭州)网络有限公司 数据接收、发送方法及装置,测试系统,存储介质
CN109257411A (zh) * 2018-07-31 2019-01-22 平安科技(深圳)有限公司 一种业务处理方法、调用管理系统和计算机设备
WO2020024469A1 (zh) * 2018-07-31 2020-02-06 平安科技(深圳)有限公司 一种业务处理方法、调用管理系统和计算机设备
CN109542935A (zh) * 2018-10-11 2019-03-29 平安科技(深圳)有限公司 一种规则引擎的执行方法、存储介质和服务器
CN109815025A (zh) * 2018-12-17 2019-05-28 顺丰科技有限公司 业务模型调用方法、装置及存储介质
CN110825455A (zh) * 2019-10-31 2020-02-21 郑州悉知信息科技股份有限公司 一种应用程序运行方法、装置和系统

Also Published As

Publication number Publication date
CN112328410A (zh) 2021-02-05

Similar Documents

Publication Publication Date Title
CN112328410B (zh) 远程过程调用的实现方法、装置、设备及存储介质
CN105975261B (zh) 一种面向统一接口调用的运行时系统及运行方法
CN109117252B (zh) 基于容器的任务处理的方法、系统及容器集群管理系统
CN113422842B (zh) 一种考虑网络负载的分布式电力用电信息数据采集系统
CN113032166B (zh) 核间通信的方法、处理器、核间通信系统及计算机可读存储介质
CN110581893B (zh) 数据传输方法、装置、路由设备、服务器及存储介质
CN104378221A (zh) 应用于集成电路生产线监控系统的异步调用方法
CN110955674B (zh) 基于java服务的异步导出方法及组件
CN113467972A (zh) 通信接口构造方法、装置以及计算机设备、存储介质
CN102420709A (zh) 一种基于任务框架的调度任务管理方法和设备
CN114610404A (zh) 基于应用框架的组件调用方法、装置和计算机设备
CN103716397A (zh) 一种面向服务仿真时钟推进方法
CN112256246A (zh) 一种用于电力系统中支持跨语言调用的微服务集成架构
CN114095537A (zh) 一种物联网应用中基于Netty的海量数据接入方法及系统
CN116089036A (zh) 多线程多模块的业务流编排处理方法、设备及存储介质
CN116089027A (zh) 一种基于jvm的非阻塞分布式计划任务调度方法
CN113434147A (zh) 基于ProtoBuf协议的消息解析方法及装置
Basanta-Val et al. A synchronous scheduling service for distributed real-time Java
Chen et al. A note on the period enforcer algorithm for self-suspending tasks
CN112416414A (zh) 一种基于状态机的微服务架构容器化轻量级工作流系统
CN115795807A (zh) 面向Modelica的分布式仿真方法
CN114090210A (zh) 一种服务调用的实现方法及装置
CN110442442B (zh) 核电厂dcs平台工程师站软件维护网络通讯方法
CN113098960A (zh) 服务运行方法、装置、服务器及存储介质
CN113992644A (zh) 一种基于无服务技术的物联网关系统及其数据处理方法

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
GR01 Patent grant
GR01 Patent grant