一种基于Actor模型的异步调用方法和系统技术方案

技术编号:38500020 阅读:20 留言:0更新日期:2023-08-15 17:08
本申请提供一种基于Actor模型的异步调用方法及装置,其中,在该方法中,为了实现一种高效的用于游戏服务器的Actor模型,为每个Actor建立了不同类型的消息队列。当Actor的消息处理函数在处理消息时,使用单线程的异步调用方法,将异步调用任务挂起后直接返回当前的线程并利用该线程执行可重入消息队列中的消息,从而实现了即时运行Actor处理逻辑业务而无需等待异步调用任务的完成,满足了游戏即时性的特点。而且,在本申请实施例的方法中,使用了满足C#异步调用规范的任务框架,保证了Actor在处理同步或异步逻辑代码时,始终处在单一线程中,无需使用复杂的多线程编程方法,提高了软件工程实践的效率。件工程实践的效率。件工程实践的效率。

【技术实现步骤摘要】
一种基于Actor模型的异步调用方法和系统


[0001]本申请涉及计算机软件
,特别涉及一种基于Actor模型的异步调用方法及装置、计算设备和计算机可读存储介质。

技术介绍

[0002]在现有技术中,Actor模型是一种常见的服务器并发模型,在游戏服务器领域应用广泛。对于Actor模型来说,不同的语言有不同的实现,有基于C/C++结合脚本语言实现的模型、有基于Golang的轻量级协程实现的Actor模型、也有Erlang自带的Actor模型。但是这些模型都有各自的缺陷,C/C++结合脚本的方案实质上是由C/C++多线程调度,会有额外的消息传递开销;有的语言例如Erlang,语法较为另类,流行度不如C#/Golang,特别是在游戏领域,C#更为流行;Golang等轻量级协程实现的Actor模型,不能提供Actor在处理异步调用挂起后其它消息的处理功能,因此,需要一种适合于开发游戏服务器的Actor模型。

技术实现思路

[0003]有鉴于此,本申请实施例提供了一种基于Actor模型的异步调用方法及装置、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。
[0004]根据本申请实施例的第一方面,提供了一种基于Actor模型的异步调用方法,包括:
[0005]为每个Actor创建两个本地消息队列,所述本地消息队列为可重入消息队列和非重入消息队列;
[0006]源Actor产生消息,并将所述消息发送给目的Actor的消息队列;
[0007]根据所述目的Actor的执行状态进行线程调度,完成消息的处理。
[0008]根据本申请实施例的第二方面,提供了一种基于Actor模型的异步调用装置,包括:
[0009]队列创建单元:用于为每个Actor创建两个本地消息队列,所述本地消息队列为可重入消息队列和非重入消息队列;
[0010]消息产生单元:用于在Actor中产生消息,并将所述消息发送给目的Actor的消息队列;
[0011]调度模块:用于根据所述目的Actor的执行状态进行线程调度,完成消息的处理。
[0012]根据本申请实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述用于基于Actor模型的异步调用方法的步骤。
[0013]根据本申请实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述用于基于Actor模型的异步调用方法的步骤。
[0014]本申请实施例中,为了实现一种高效的用于游戏服务器的Actor模型,为每个Actor建立了可重入消息队列和非重入消息队列;当Actor的消息处理函数在处理消息时,
使用单线程的异步调用方法,在执行异步调用任务时挂起该任务,直接返回当前的线程并利用该线程执行可重入消息队列中的消息,从而实现了即时运行Actor处理逻辑业务而无需等待异步调用任务的完成,满足了游戏即时性的特点。在本申请实施例的方法中,使用了满足C#异步调用规范的任务框架,保证了Actor在处理同步或异步逻辑代码时,始终处在单一线程中,无需使用复杂的多线程编程方法,提高了软件工程实践的效率。
附图说明
[0015]图1是本申请实施例提供的计算设备的结构框图;
[0016]图2是本申请实施例提供的一种基于Actor模型的异步调用方法的流程示意图;
[0017]图3是本申请实施例提供的一种基于Actor模型的异步调用装置的结构示意图。
具体实施方式
[0018]在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此本申请不受下面公开的具体实施的限制。
[0019]在本申请一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本申请一个或多个实施例。在本申请一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本申请一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
[0020]应当理解,尽管在本申请一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本申请一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。
[0021]在本申请中,提供了一种基于Actor模型的异步调用方法及装置、计算设备和计算机可读存储介质,在下面的实施例中逐一进行详细说明。
[0022]图1示出了根据本申请实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
[0023]计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(PSTN)、局域网(LAN)、广域网(WAN)、个域网(PAN)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(NIC))中的一个或多个,诸如IEEE802.11无线局域网(WLAN)无线接口、全球微波互联接入(Wi

MAX)接口、以太网接口、通用串行总线(USB)接口、蜂窝网络接口、蓝牙接口、近场通信(NFC)接口,等等。
[0024]在本申请的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本申请范围的限制。本领域技术人员可以根据需要,增添或替换其他部
件。
[0025]计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或PC的静止计算设备。计算设备100还可以是移动式或静止式的服务器。
[0026]在游戏服务器开发过程中,为了使得服务器的功能符合游戏业务特点和通用性,同时减轻编写多线程逻辑代码的复杂性,通常使用Actor模型框架,以便使用单线程规则编写逻辑代码。在现有技术中,C++/C结合脚本的Actor模型有一些语言上的不利之处,如语言特性、共享数据处理、对开发人员的技能要求等。而C#语言在游戏开发中十分流行,其服务器开发框架.NET也已经完善,在提供跨平台的同时本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于Actor模型的异步调用方法,其特征在于,包括:为每个Actor创建两个本地消息队列,所述本地消息队列为可重入消息队列和非重入消息队列;源Actor产生消息,并将所述消息发送给目的Actor的消息队列;根据所述目的Actor的执行状态进行线程调度,完成所述消息的处理。2.根据权利要求1所述的方法,其中,所述源Actor产生消息,并将该消息发送给目的Actor的消息队列包括:当所述源Actor进行消息发送时,依据该消息是否返回结果将消息分成两种类型,其中,第一类型需要等待返回消息处理结果,第二类型无需等待消息处理结果;其中,当所述源Actor发送的消息为第一类型时,挂起源Actor,直到源Actor接收到消息处理结果。3.根据权利要求1所述的方法,其中,所述源Actor产生消息,并将该消息发送给目的Actor的消息队列还包括:当源Actor产生消息后,根据所述消息的可重入与否以及目的Actor的地址,将产生的消息发送给目的Actor的可重入消息队列或者非重入消息队列。4.根据权利要求3所述的方法,其中,所述根据目的Actor的执行状态进行线程调度,完成消息的处理包括:如果所述目的Actor处在挂起状态,根据可重入消息队列中的消息数量执行线程调度;其中,所述目的Actor的线程在处理可重入消息时,无需等待当前消息处理函数的处理结果。5.根据权利要求4所述的方法,其中,所述根据目的Act...

【专利技术属性】
技术研发人员:扈红柯郭子文李建良乐坚强杨东何雨泉林逸杨利华
申请(专利权)人:北京云游互动网络科技有限公司
类型:发明
国别省市:

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

1