一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种能即时响应的数据更新方法和系统与流程

2022-06-01 02:58:04 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,特别涉及一种能即时响应的数据更新方法、系统、计算设备和计算机可读存储介质。


背景技术:

2.在传统的c/s架构中,数据的更新逻辑大部分在服务器端进行处理,客户端进行相关操作后需要等待服务器端返回处理结果,因此,对于一些需要在客户端进行频繁操作的业务,例如游戏玩家频繁地修改角色的外形、道具的属性,领取任务等,对带宽以及服务器的性能要求较高,导致在很多情况下客户端接收的响应结果不及时,极大的影响了用户的体验。
3.在现有技术中,为了使得客户端能做出即时响应,会在客户端应用实现与服务器端相似的代码以完成响应,但通常会导致数据不一致等情况,并造成了代码的冗余。


技术实现要素:

4.有鉴于此,本技术实施例提供了一种能及时响应的数据更新方法、系统、计算设备和计算机可读存储介质,以解决现有技术中存在的技术缺陷。
5.根据本技术实施例的第一方面,提供了一种能及时响应的数据更新方法,包括:
6.在客户端和服务器设置本地服务器localserver模块;所述客户端和服务器的localserver模块的业务逻辑代码一致;
7.当用户执行数据更新操作时,客户端发送command指令到客户端与服务器的localserver模块,所述command指令包含数据更新逻辑;
8.客户端localserver模块执行所述command指令中的数据更新逻辑,并通知客户端显示层;
9.服务器localserver模块执行所述command指令中的数据更新逻辑,并将结果返回给客户端;
10.客户端对服务器的返回的结果进行校验,根据校验结果执行后续指令。
11.根据本技术实施例的第二方面,提供了一种能及时响应的数据更新系统,包括:
12.该系统包括客户端、服务器以及设置于客户端和服务器的本地服务器localserver,用于执行所述能及时响应的数据更新方法。
13.根据本技术实施例的第三方面,提供了一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述能及时响应的数据更新方法的步骤。
14.根据本技术实施例的第四方面,提供了一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现所述能及时响应的数据更新方法的步骤。
15.在本技术实施例中,为客户端与服务器设置包括了相同业务代码的本地服务器localserver模块,当用户执行数据更新操作时,可以在客户端本地执行业务逻辑,因此频
繁执行的操作无需等待服务器反馈,具有良好的用户体验。对于随着时间进行的自动更新逻辑,采用了通过惰性更新的方式,将服务器的定时器转移到客户端。而在服务器端,根据command指令中的操作发生时间和localserver的业务逻辑,直接将数据对象推演到当前操作发生时间,从而将数据对象推进到跟客户端相同的状态,实现了数据的一致性。同时,服务器和客户端共用业务逻辑代码,降低了开发沟通成本,避免了大量冗余代码的产生。
附图说明
16.图1是本技术实施例提供的计算设备的结构框图;
17.图2是本技术实施例提供的能即时响应的数据更新方法的一流程示意图;
18.图3是本技术实施例提供的能即时响应的数据更新系统的一结构示意图;
19.图4是本技术实施例提供的用于实现数据更新逻辑的command指令的一结构示意图;
具体实施方式
20.在下面的描述中阐述了很多具体细节以便于充分理解本技术。但是本技术能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本技术内涵的情况下做类似推广,因此本技术不受下面公开的具体实施的限制。
21.在本技术一个或多个实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本技术一个或多个实施例。在本技术一个或多个实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。还应当理解,本技术一个或多个实施例中使用的术语“和/或”是指并包含一个或多个相关联的列出项目的任何或所有可能组合。
22.应当理解,尽管在本技术一个或多个实施例中可能采用术语第一、第二等来描述各种信息,但这些信息不应限于这些术语。这些术语仅用来将同一类型的信息彼此区分开。例如,在不脱离本技术一个或多个实施例范围的情况下,第一也可以被称为第二,类似地,第二也可以被称为第一。取决于语境,如在此所使用的词语“如果”可以被解释成为“响应于确定”。
23.在本技术中,提供了一种能即时响应的数据更新方法、系统、计算设备和计算机可读存储介质,在下面的实施例中逐一进行详细说明。
24.图1示出了根据本技术一实施例的计算设备100的结构框图。该计算设备100的部件包括但不限于存储器110和处理器120。处理器120与存储器110通过总线130相连接,数据库150用于保存数据。
25.计算设备100还包括接入设备140,接入设备140使得计算设备100能够经由一个或多个网络160通信。这些网络的示例包括公用交换电话网(pstn)、局域网(lan)、广域网(wan)、个域网(pan)或诸如因特网的通信网络的组合。接入设备140可以包括有线或无线的任何类型的网络接口(例如,网络接口卡(nic))中的一个或多个,诸如ieee802.11无线局域网(wlan)无线接口、全球微波互联接入(wi-max)接口、以太网接口、通用串行总线(usb)接口、蜂窝网络接口、蓝牙接口、近场通信(nfc)接口,等等。
26.在本技术的一个实施例中,计算设备100的上述部件以及图1中未示出的其他部件
也可以彼此相连接,例如通过总线。应当理解,图1所示的计算设备结构框图仅仅是出于示例的目的,而不是对本技术范围的限制。本领域技术人员可以根据需要,增添或替换其他部件。
27.计算设备100可以是任何类型的静止或移动计算设备,包括移动计算机或移动计算设备(例如,平板计算机、个人数字助理、膝上型计算机、笔记本计算机、上网本等)、移动电话(例如,智能手机)、可佩戴的计算设备(例如,智能手表、智能眼镜等)或其他类型的移动设备,或者诸如台式计算机或pc的静止计算设备。
28.计算设备100还可以是移动式或静止式的服务器。
29.其中,处理器120可以执行图2所示的能即时响应的数据更新方法中的步骤。图2示出了根据本技术一实施例的能即时响应的数据更新方法的流程图,包括步骤202至步骤210。
30.步骤s202:在客户端和服务器设置本地服务器localserver模块,所述客户端和服务器的localserver模块的业务逻辑代码一致;
31.在现有技术中,为了实现客户端的即时响应,会在客户端程序中实现一套与服务器端相似的代码来模仿服务器响应,但是,由于客户端与服务器端程序使用的编程语言及实现方式的不同会导致生成的数据不一致的问题,同时这种方式也造成了代码的冗余,降低了开发的效率。
32.因此在本技术的实施方式中,分别为客户端和服务器设置一个本地的localserver模块,该localserver模块的代码一致。该模块同时设置在客户端以及服务器上,由于实现代码一样,解决了客户端与服务器程序处理逻辑和生成数据不一致的问题,也不存在多次开发导致的代码冗余问题。
33.步骤s204:当用户执行数据更新操作时,客户端根据操作生成一command指令并发送到客户端与服务器的localserver模块;
34.在一种具体的实施方式中,当用户执行了数据更新操作时,客户端根据相关数据生成一个command指令,并将包含了数据更新逻辑的command指令发送给客户端和服务器的localserver模块。
35.进一步的,command指令包含数据更新逻辑包括用户操作发生的时间、数据对象data以及其他参数,任何对于数据的更改操作只能通过command指令进行。
36.步骤s206:当客户端的localserver模块接收到command指令后,执行所述command指令中的数据更新逻辑,并通知客户端显示层;
37.在一种具体的实施方式中,客户端的localserver模块接收客户端发送的操作指令,例如道具的升级。客户端localserver模块根据command指令对数据对象进行更新,完成更新后抛出事件,通知显示层。由于客户端发出的数据更新指令在客户端本地的localserver执行,因此执行速度快,可以实现即时响应。
38.步骤s208:当服务器的localserver模块接收到command指令后,执行所述command指令中的数据更新逻辑,并通过服务器将结果返回给客户端;
39.当服务器的localserver模块接收到command指令后,进行反序列化并执行该command指令中的数据更新逻辑,执行后将数据结果返回给服务器,由服务器进行数据存储及分发的操作,并将结果返回给客户端。
40.步骤s210:客户端对服务器的返回的结果进行校验,根据校验结果执行后续指令。
41.在一种具体的实施方式中,针对客户端本地逻辑处理操作指令,例如道具的升级,服务器返回localserver的处理结果,客户端对该结果进行校验,如果发生错误则进行异常处理,如果没有错误发生则意味着服务器与客户端的处理结果相同,无需进行其他的处理。
42.在另一种具体的实施方式中,针对必须由服务器实现的操作指令,例如召唤的结果,抽卡的结果等,这些数据必须由服务器来处理并下发;因此,当服务器接收客户端发送的此类操作指令后,服务器localserver生成相应的业务数据,如抽卡结果并返回;客户端对业务数据进行校验,校验通过后由客户端根据该业务数据执行相应的数据更新逻辑。
43.在上述实施方式中,localserver根据不同的业务逻辑需求和反馈结果执行了不同的功能,完成了两种不同模式的逻辑处理。
44.根据上述实施例实现的一个具体案例,例如游戏玩家为道具进行升级或进行抽卡时,会频繁点击按钮,如果每次操作都需要通过服务器的反馈确认才能完成,那么在客户端实现即时的响应或刷新则是不现实的。因此,在本技术的该实施例中,每当玩家点击一次按钮时,将该操作的时间以及相关的数据其封装到一个command指令中。该command指令首先在客户端本地的localserver上执行,完成对数据更新并通知给显示层刷新道具的显示状态,由于在本地执行,该过程可以即时完成,无需等待,用户体验良好。同时,为了保持客户端与服务器的数据一致性,该command指令也被发送给服务器的localserver,在服务器端也执行同样的数据更新逻辑并返回执行结果,客户端对返回的结果进行校验,如果发生错误则进行异常处理。由于上述客户端和服务器端的localserver模块在业务逻辑代码上一致,因此在执行该操作时,不仅实现了即时响应,也减少了代码层面的冗余开发,在进行客户端开发调试时也可以不依赖于服务端。
45.在本技术的另一实施例中,如图3所示,实现了一种能即时反馈的数据更新系统,该系统包括客户端和服务器以及设置在两者上的本地服务器localserver。
46.在游戏逻辑中,单用户相关的逻辑不仅包括主动操作还包括自动执行的被动操作,例如游戏玩家会主动使用道具增加角色的体力值,同时角色的体力值也随着时间的流逝而自动减少,例如每隔5分钟减少10点体力值。在现有技术中,为了实现类似数据的同步,通常在服务器上设置一些定时器,触发定时器后服务器会向客户端推送协议,然后客户端进行数据更新,这无疑使得客户端与服务器间的交互频繁,增加了整个系统的开销。在本技术的该实施例中,使用localserver技术将定时逻辑转移到了客户端,减少了客户端同服务器间的频繁操作,也不会因为网络问题导致需要定时触发的逻辑没有被触发的问题。
47.同样,在本实施例中,在客户端和服务器设置本地服务器localserver模块,客户端和服务器的localserver模块的代码保持一致;
48.当用户执行数据更新操作时,客户端根据该操作生成一command指令并发送到客户端localserver模块执行,其中数据对象还可以包含自动更新逻辑;
49.一种具体的场景中,自动更新逻辑包括,例如,点击建筑升级后,10秒钟后自动完成升级。如果采用服务器计时,触发定时器后服务器向客户端推送协议,然后客户端进行数据更新,但这种方式会带来客户端与服务器之间的频繁交互。因此在本技术实施例中,通过localserver技术可以将定时的功能转移到客户端,服务器端不再使用定时器,从而减少交互。
50.在一种具体的实施方式中,command指令的一个实例包括下列函数的执行:
51.·
初始化函数init()
52.根据操作发生的时间time、数据对象data以及其他参数对command指令进行初始化。
53.·
statusupdate(time)函数
54.该函数用于将数据对象的状态推演到当前操作时间。
55.在一种具体的实施方式中,数据对象data由系统中的业务逻辑进行更新。当对数据对象进行更新后,都需要将数据对象的updatetime属性更新到最新时间。当下一次操作发生时,获取数据对象的属性updatetime到操作发生时间之间发生的所有更新指令并执行,这些更新指令根据系统的业务逻辑而产生。
56.在另一种具体的实施方式中,数据对象还包含自动更新逻辑。
[0057][0058]
通过该函数获取数据对象中上一次自动更新指令autocommand的发生时间lastautocommandupdatetime到该操作发生的时间time之间发生的自动执行指令autocommand,如果存在autocommand,则将数据对象的更新时间updatetime和lastautocommandupdatetime更新并执行autocommand,然后继续进行循环,直到截止到最新时间之间没有autocommand为止,通过该方式将数据对象的状态推演到最新的时间。
[0059]
例如,角色的体力值每隔5分钟减少10点,数据对象data中上一次自动减少体力发
生的时间lastautocommandupdatetime是13:00点,若当前操作例如使用道具发生的时间time为13:07,则首先自动减少角色10点体力值,将角色对象的lastautocommandupdatetime更新为13:05,角色对象的updatetime更新为13:07,然后进行下一个循环。
[0060]
进一步的,在客户端上通过定时器来执行statusupdate函数,以实现自动数据更新逻辑autocommand的执行,从而推动客户端的数据对象的状态跟随时间前进。
[0061]
·
getresultcode()
[0062]
该函数用于在更新数据之前判断command指令是否合法,如果不合法则不执行指令并返回错误码。其中,自动指令autocommand不需要进行合法性检查,因为自动指令并非由用户主动触发。
[0063]
getresultcode函数的具体逻辑根据command指令本身的逻辑实现,比如英雄升级协议的合法性检查包括资源是否足够、英雄是否存在、英雄是否已经超过当前等级上限等等。这部分代码需要同时需要在服务器执行,所以在实现该函数时还需要考虑服务器的需求。
[0064]
·
localupdate()
[0065]
localupdate函数负责执行具体业务逻辑并更新数据。当command指令中的statusupdate(time)函数将数据对象的状态推演到当前操作发生的时间后,localupdate方法执行当前操作包括的具体更新逻辑,该方法执行结束后会抛出事件,客户端显示层可监听该事件进行即时反馈。
[0066]
在一种具体的实施中,针对客户端本地逻辑处理操作指令,例如,当用户使用道具增加角色的体力值后,command指令首先将角色对象的状态通过statusupdate函数推演到点击道具的时间,然后使用localupdate函数执行道具的功能逻辑来增加体力值。
[0067]
在另一种具体的实施方式中,针对必须由服务端来实现的操作指令,例如召唤的结果,抽卡的结果等,这些数据必须由服务器来处理并下发。因此在此实施方式中,command指令仅将操作指令封装后发送给服务器,由服务器执行相应的业务逻辑,在该情况下,command指令中的localupdate()函数不处理任何业务逻辑。
[0068]
·
clientrequest()函数
[0069]
当localupdate函数执行成功后,客户端通过clientrequest函数向服务器发送序列化后的command指令。
[0070]
在本技术实施例中,客户端对command指令的类型进行判断,仅发送由用户主动操作生成的command指令到服务器,而不发送autocommand指令。
[0071]
·
getresponse()函数
[0072]
当服务器将执行结果返回给客户端后,客户端通过getresponse函数对该结果进行校验。
[0073]
在一种具体的实施方式中,针对客户端本地逻辑处理操作指令,对服务器返回的处理结果进行校验,如果发生错误则进行异常处理,如果没有错误发生则意味着服务器与客户端的处理结果相同,无需进行其他的处理。
[0074]
在另一种具体的实施方式中,针对必须由服务器实现的操作指令,例如召唤的结果,抽卡的结果等,这些数据必须由服务器来处理,如服务器localserver生成抽卡结果。
getresponse函数对此种类型的返回结果进行校验,若校验通过则调用remoteupdate函数根据返回结果执行客户端本地的数据更新逻辑。
[0075]
·
remoteupdate()函数
[0076]
该函数针对必须由服务器来实现的操作command指令,接收服务器返回的数据并执行,实现客户端的数据更新逻辑,实现客户端与服务器的数据一致性。
[0077]
与客户端相对应的,在服务器端,服务器接收客户端发送的command指令后,转发给服务器的localserver模块,localserver模块首先将数据对象推演到操作发生的时间。
[0078]
由于服务器不存在定时器,也没有通过客户端获取自动更新指令autocommand。因此,为了保持服务器与客户端的数据一致性,服务器localserver执行command指令中的statusupdate(time)函数,将数据对象的状态推演到command指令中操作发生的时间time。
[0079]
在一种具体的实施方式中,玩家分别在13:00(第1次操作)和13:10(第2次操作)使用了道具增加体力值,假设角色对象中上一次自动减少体力发生的时间laststaminaupdatetime是12:59;客户端的localserver会利用定时器,随着时间的进行在13:04和13:09获取两个体力自动减少的autocommand并执行。而对于服务器来说,由于不使用定时器,也获取不到客户端上发生的自动指令,因此服务器的localserver在接收到第2次操作的command指令(13:10)时,根据业务处理逻辑将角色推演到最新的状态(13:10)。在推演的过程中,服务器通过接收的第1次操作知晓了角色对象中上一次自动减少体力发生的时间laststaminaupdatetime是12:59,通过接收的第2次操作知晓了当前操作发生的时间13:10,因此服务器根据自动更新逻辑
‑“
角色的体力值每隔5分钟减少10点”,直接减去20点体力值。通过该方法,localserver先将角色对象的状态从前1次操作时间推演到当前次操作时间,然后才开始执行当前次操作的具体业务,从而保证了客户端与服务器的数据一致性。
[0080]
在另一种具体的实施方式中,玩家进行了1个建筑的升级、10个兵的训练操作,这两个主动操作发生在第1秒,他们完成的时间是第20秒,当客户端的计时器经过了20秒后,这个两个操作将自动完成并通知显示层。而在服务器端,没有定时器也获取不到客户端上的完成指令,因此,服务器在第1秒收到升级请求后并不更新,仅停留在第1秒的状态,直到下次收到客户端的请求的时候才更新到最新的状态。比如,当客户端在第200秒的时候发起新请求,服务器的localserver将数据对象的状态从第1秒推演到第200秒,从而在数据库端也完成了上述升级操作的数据同步工作。
[0081]
在上述实施方式中,对于游戏场景中经常出现的自动更新逻辑,采用了通过惰性更新的方式,将服务器的定时器转移到客户端。当客户端执行相关的自动更新逻辑时,使用本地的定时器与localserver即可完成,无需与服务器进行交互,提高了应用的响应速度和效率。而在服务器端,localserver根据command指令中的操作发生时间和业务逻辑,直接将数据对象推演到当前操作发生时间,从而将数据推进到跟客户端相同的状态,实现了数据的一致性。
[0082]
本技术一实施例中还提供一种计算设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机指令,所述处理器执行所述指令时实现所述能即时响应的数据更新方法的步骤。
[0083]
上述为本实施例的一种计算设备的示意性方案。需要说明的是,该计算设备的技
术方案与上述的能即时响应的数据更新方法的技术方案属于同一构思,计算设备的技术方案未详细描述的细节内容,均可以参见上述能即时响应的数据更新方法的技术方案的描述。
[0084]
本技术一实施例还提供一种计算机可读存储介质,其存储有计算机指令,该指令被处理器执行时实现如前所述能即时响应的数据更新方法的步骤。
[0085]
上述为本实施例的一种计算机可读存储介质的示意性方案。需要说明的是,该存储介质的技术方案与上述的能即时响应的数据更新方法的技术方案属于同一构思,存储介质的技术方案未详细描述的细节内容,均可以参见上述能即时响应的数据更新方法的技术方案的描述。
[0086]
上述对本技术特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0087]
所述计算机指令包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
[0088]
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本技术并不受所描述的动作顺序的限制,因为依据本技术,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本技术所必须的。
[0089]
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
[0090]
以上公开的本技术优选实施例只是用于帮助阐述本技术。可选实施例并没有详尽叙述所有的细节,也不限制该发明仅为所述的具体实施方式。显然,根据本技术的内容,可作很多的修改和变化。本技术选取并具体描述这些实施例,是为了更好地解释本技术的原理和实际应用,从而使所属技术领域技术人员能很好地理解和利用本技术。本技术仅受权利要求书及其全部范围和等效物的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献