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

执行异步请求响应操作的方法、装置、设备及存储介质

文献发布时间:2023-06-19 11:45:49


执行异步请求响应操作的方法、装置、设备及存储介质

技术领域

本发明特别涉及一种执行异步请求响应操作的方法、装置、设备及存储介质,需要说明的是,本发明提供的执行异步请求响应操作的方法、装置、设备及存储介质可用于物联网技术领域,也可用于除物联网领域之外的任意领域,本发明对执行异步请求响应操作的方法、装置、设备及存储介质的应用领域不做限定。

背景技术

近年来,随着前端多客户端场景的丰富,互联网产品对于前端的用户界面和用户体验越来越重视,前端差异化越来越大,移动端对于访问连接数和数据量也有着更高要求,后端服务边界上的通用API层变得难以维护。为了解决前端多端差异化导致后端服务变动频繁的问题,为前端服务的后端(BFF,Backend For Frontend)应运而生。BFF层(主要用作接口聚合及接口数据裁剪等)一般基于Node.js(Node.js是基于Chrome V8引擎的JavaScript运行环境,它既可以作为Web服务器提供服务,又可以作为HTTP客户端发送请求)搭建Web服务器,它作为前端页面和多个后端服务器之间的中间层,主要负责接收前端HTTP请求,再发送多个请求到后端服务器获得响应数据,将数据进行组合或裁剪后返回给前端页面。

Node.js向后端服务器发送多个HTTP请求,需全部请求得到响应后才能对数据进行裁剪和组合,即各请求间的响应必须全部完成后才能执行后续操作,或者请求的响应存在先后顺序的逻辑关系,必须依次执行。这时,开发人员一般采用同步请求方式实现,在前一个请求获得响应后再发送下一个请求,依次获得请求的响应后再顺序发送剩余请求的方式。当请求数量较多时,这会导致请求时间过长,进而造成前端页面响应缓慢,严重影响用户体验。

并发异步请求方式能减少同步请求间的相互等待时间,但是:

发送请求代码按顺序编写,响应却不是按照顺序返回,导致无法确定响应的先后顺序,造成代码执行混乱和逻辑错误,无法达到顺序执行的目的;

响应全部完成的状态依靠定时循环任务完成检测,导致实际完成时间并非实时检测到,间接造成请求时间延长。而且,一旦开发人员未正确关闭定时循环任务,可能存在导致Node.js服务卡死的风险。

发明内容

本发明实施例提供了一种执行并发异步请求响应操作的方法,以解决现有技术中存在的延时长、代码错误率高、服务器卡死的技术问题。该方法包括:

接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息;

根据所述异步请求定义信息和所述响应操作的执行顺序形成异步请求定义对象;

根据所述异步请求定义对象并行发送多个异步请求;

针对每个接收到响应的异步请求,当根据所述异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求均已响应时,执行该异步请求的响应操作,当根据所述异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时,根据所有响应完成的操作信息进行操作。

本发明实施例还提供了一种执行并发异步请求响应操作的装置,以解决现有技术中存在的延时长、代码错误率高、服务器卡死的技术问题。该装置包括:

信息接收模块,用于接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息;

请求注册模块,用于根据所述异步请求定义信息和所述响应操作的执行顺序形成异步请求定义对象;

请求发送模块,用于根据所述异步请求定义对象并行发送多个异步请求;

响应状态监听模块,用于针对每个接收到响应的异步请求,当根据所述异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求均已响应时,向响应操作执行模块发送第一触发信息,当根据所述异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时,向所述响应操作执行模块发送第二触发信息;

所述响应操作执行模块,用于基于所述第一触发信息执行该异步请求的响应操作,基于所述第二触发信息根据所有响应完成的操作信息进行操作。

本发明实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的执行并发异步请求响应操作的方法,以解决现有技术中存在的延时长、代码错误率高、服务器卡死的技术问题。

本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的执行并发异步请求响应操作的方法的计算机程序,以解决现有技术中存在的延时长、代码错误率高、服务器卡死的技术问题。

在本发明实施例中,提出了接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息后,基于异步请求定义信息和响应操作的执行顺序形成异步请求定义对象,进而并行发送多个异步请求,接收到响应时,针对每个接收到响应的异步请求,实时根据异步请求定义对象中响应操作的执行顺序,判断排序在该异步请求之前的异步请求是否均已响应,若是,则直接执行该异步请求的响应操作;当根据异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时(即所有异步请求的响应完成时),根据所有响应完成的操作信息进行操作,实现了实时基于异步请求的响应状态,按照响应操作的执行顺序依次执行各个异步请求的响应操作,与现有技术相比,可以避免代码执行混乱和逻辑错误等问题,实现了响应操作顺序执行的目的,有利于提高程序可靠性;同时,异步请求的响应状态是基于响应接收实时检测的,进而实现响应操作的实时、顺序执行,与现有技术相比,避免使用定时循环任务检测响应状态,有利于减少延时,有利于避免定时循环任务死循环、导致服务器卡死等问题,进而有利于提高服务响应效率,提高前端页面响应速度和用户体验。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,并不构成对本发明的限定。在附图中:

图1是本发明实施例提供的一种执行异步请求响应操作的方法的流程图;

图2是本发明实施例提供的一种实施上述执行异步请求响应操作的方法的原理架构图;

图3是本发明实施例提供的一种计算机设备的结构框图;

图4是本发明实施例提供的一种执行异步请求响应操作的装置的结构框图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,下面结合实施方式和附图,对本发明做进一步详细说明。在此,本发明的示意性实施方式及其说明用于解释本发明,但并不作为对本发明的限定。

在本发明实施例中,提供了一种执行异步请求响应操作的方法,如图1所示,该方法包括:

步骤102:接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息;

步骤104:根据所述异步请求定义信息和所述响应操作的执行顺序形成异步请求定义对象;

步骤106:根据所述异步请求定义对象并行发送多个异步请求;

步骤108:针对每个接收到响应的异步请求,当根据所述异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求均已响应时,执行该异步请求的响应操作,当根据所述异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时,根据所有响应完成的操作信息进行操作。

由图1所示的流程可知,在本发明实施例中,提出了接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息后,基于异步请求定义信息和响应操作的执行顺序形成异步请求定义对象,进而并行发送多个异步请求,接收到响应时,针对每个接收到响应的异步请求,实时根据异步请求定义对象中响应操作的执行顺序,判断排序在该异步请求之前的异步请求是否均已响应,若是,则直接执行该异步请求的响应操作;当根据异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时(即所有异步请求的响应完成时),根据所有响应完成的操作信息进行操作,实现了实时基于异步请求的响应状态,按照响应操作的执行顺序依次执行各个异步请求的响应操作,与现有技术相比,可以避免代码执行混乱和逻辑错误等问题,实现了顺序执行的目的,有利于提高程序可靠性;同时,异步请求的响应状态是基于响应接收实时检测的,进而实现响应操作的实时、顺序执行,与现有技术相比,避免使用定时循环任务检测响应状态,有利于减少延时,有利于避免定时循环任务死循环、导致服务器卡死等问题,进而有利于提高服务响应效率,提高前端页面响应速度和用户体验。

具体实施时,上述异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息可以是开发人员根据具体需求定义并输入的。

具体的,异步请求定义信息可以包括传入请求url、请求参数等定义异步请求的相关信息。响应操作的执行顺序可以包括异步请求标识信息、顺序标识等信息。所有响应完成的操作信息可以包括所有响应完成后需要进行的操作类型、操作方法等信息。

具体实施时,为了实现异步请求的定义,在本实施例中,接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息后,可以通过Node.js的HTTP模块将异步请求封装为Promise对象,进而根据异步请求定义信息和响应操作的执行顺序形成异步请求定义对象,具体的,可以存储异步请求定义对象。其中,Promise用于表示一个异步操作的最终完成(或失败)及其结果值的对象,有三种状态:Pending(执行中)、Fulfilled(成功)、Rejected(失败),属于ES6语法规范,Node.js直接可用,IE或其他类型低版本浏览器无法使用。

具体实施时,生成异步请求定义对象后,即可并行发送多个异步请求,自动设置异步请求为执行中状态,进而接收各个异步请求的响应,例如,向后端服务器并行发送多个异步请求。具体的,异步请求相对于同步请求而言,在执行发送HTTP请求的代码后,后方代码继续执行,不会像同步请求一样等待请求得到响应并执行完成回调函数后才执行后方代码。

具体实施时,接收到响应后,即可基于响应数据中的相关信息判断出该响应对应的异步请求,进而可以实时检测、监听各个异步请求的响应状态,可以根据该响应对应的异步请求在响应操作的执行顺序中的排序,存储该响应的响应数据,并将该响应对应的异步请求的响应状态设置为完成状态,至此基于接收的响应完成异步请求响应状态的监听。

例如,如图2所示,浏览器发出请求A,Node.js服务器接收到请求A后,发送1、2、3编号的三个异步请求,响应操作的执行顺序为2、3、1,将三个异步请求并行发送给后端服务器后,接收的响应按照响应操作的执行顺序存储,即按照响应2、响应3、响应1的顺序存储响应数据。

具体实施时,为了实时基于响应状态按照响应操作的执行顺序实现顺序执行的目的,在本实施例中,针对每个接收到响应的异步请求,当根据异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求均已响应时(即判断出该异步请求的响应操作前述无依赖),直接执行该异步请求的响应操作,当根据异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时,根据所有响应完成的操作信息进行操作。

具体实施时,当根据异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求存在未响应情况时(即判断出该异步请求的响应操作前述有依赖),则不执行该异步请求的响应操作,继续监听响应状态,直至等到该异步请求之前的异步请求均已响应时,再执行该异步请求的响应操作,并将该异步请求的响应操作状态设置为已完成。

具体的,例如,如图2所示,有1、2、3编号的三个异步请求,响应操作的执行顺序为2、3、1,将三个异步请求并行发送给后端服务器后,当接收到异步请求3的响应时,监听异步请求3的响应状态为完成,此时实时根据响应操作的执行顺序判断排序在异步请求3之前的异步请求2是否为已响应(若是,即前述无依赖,若否,即前述有依赖),若是,则判断前述无依赖,直接执行异步请求3的响应操作,若否,则判断前述有依赖,暂不执行异步请求3的响应操作,继续监听响应状态,期间其他异步请求得到响应且为前述无依赖时,实时执行其他异步请求的响应操作,例如,期间接收到异步请求1的响应,则实时执行异步请求1的响应操作,继续监听响应状态,直至排序在异步请求3之前的异步请求2已响应,则实时执行异步请求3的响应操作,当接收到响应操作的执行顺序中最后一个响应时,判断出所有异步请求均已响应,此时实时根据所有响应完成的操作信息进行操作。

具体实施时,在根据所有响应完成的操作信息进行操作的过程中,可以按照所述响应操作的执行顺序将各个异步请求的响应数据作为参数,根据所有响应完成的操作信息进行操作。

具体实施时,上述执行异步请求响应操作的方法可以在BFF层基于Node.js实现,也可以在能解析Promise语法的现代浏览器(例如,Edge或其他类型高版本浏览器)中使用。

在本实施例中,以基于Node.js实施上述执行异步请求响应操作的方法为例,如图2所示,可以通过以下步骤实现:

步骤1):使用Node.js的HTTP模块基于开发人员输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息,将异步请求封装为Promise对象,该步骤的功能可以通过异步请求注册器实现;

步骤2):异步请求注册器根据开发人员提供的传入请求url、请求参数、响应执行顺序等数据,形成异步请求定义对象;

步骤3):请求存储器存储异步请求定义对象,并分析每个异步请求的响应操作的执行顺序,将每个异步请求的响应操作的执行顺序注册到响应状态监听器中;

步骤4):请求发送器从请求存储器中读取全部的异步请求,并行发送每个异步请求给后端服务器,自动设置异步请求为执行中状态;

步骤5):当请求接收器接收到某个响应时,根据请求存储器存储的异步请求定义对象判断该响应对应的异步请求在响应操作的执行顺序中的排序,进而按照响应操作的执行顺序自动将该响应的响应数据保存到响应数据记录器中,自动设置该条异步请求为完成状态,并实时将该条异步请求的该响应状态发送到响应状态监听器;

步骤6):响应状态监听器根据响应操作的执行顺序分析该异步请求的响应操作的前后依赖关系:若前述无依赖,触发响应操作执行器直接执行该异步请求的响应操作,并置响应操作状态为已完成;若前述有依赖,则继续等待下一条响应状态通知,直至该异步请求的响应操作为前述无依赖时,触发响应操作执行器直接执行该异步请求的响应操作;

步骤7):当响应状态监听器接收到最后一条响应状态通知时(即所有异步请求均已响应时),按响应操作的执行顺序实时将每个异步请求的响应数据作为参数传递到开发人员定义的所有响应完成的操作中,开发人员可获取到各条响应的记录并执行后续逻辑,例如,进行数据裁剪/聚合,并将数据裁剪/聚合后的最终数据反馈给Node.js服务器。

上述执行异步请求响应操作的方法,仅需开发人员提供异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息这三个参数,即可采用并行发送异步请求,解析异步请求定义根据响应操作的执行顺序实时监听每个异步请求的响应状态,根据每个异步请求的响应状态和响应操作的执行顺序实时依次执行各个响应操作,在所有请求都响应后再实时执行请求完成后的操作逻辑,达到前端请求在Node.js端快速聚合响应数据的目的,从而提高BFF层的服务响应效率,提高前端页面响应速度和用户体验。

在本实施例中,提供了一种计算机设备,如图3所示,包括存储器302、处理器304及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述任意的执行异步请求响应操作的方法。

具体的,该计算机设备可以是计算机终端、服务器或者类似的运算装置。

在本实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有执行上述任意的执行异步请求响应操作的方法的计算机程序。

具体的,计算机可读存储介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机可读存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读存储介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

基于同一发明构思,本发明实施例中还提供了一种执行异步请求响应操作的装置,如下面的实施例所述。由于执行异步请求响应操作的装置解决问题的原理与执行异步请求响应操作的方法相似,因此执行异步请求响应操作的装置的实施可以参见执行异步请求响应操作的方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。

图4是本发明实施例的执行异步请求响应操作的装置的一种结构框图,如图4所示,该装置包括:

信息接收模块402,用于接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息;

请求注册模块404,用于根据所述异步请求定义信息和所述响应操作的执行顺序形成异步请求定义对象;

请求发送模块406,用于根据所述异步请求定义对象并行发送多个异步请求;

响应状态监听模块408,用于针对每个接收到响应的异步请求,当根据所述异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求均已响应时,向响应操作执行模块发送第一触发信息,当根据所述异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时,向所述响应操作执行模块发送第二触发信息;

所述响应操作执行模块410,用于基于所述第一触发信息执行该异步请求的响应操作,基于所述第二触发信息根据所有响应完成的操作信息进行操作。

在一个实施例中,还包括:

响应接收模块,用于接收到响应时,根据该响应对应的异步请求在所述响应操作的执行顺序中的排位,存储该响应的响应数据,并将该响应对应的异步请求的响应状态设置为完成状态,向所述响应状态监听模块发送该响应对应的异步请求的响应状态。

在一个实施例中,所述响应状态监听模块,还用于当根据所述异步请求定义对象中响应操作的执行顺序,判断出排序在该异步请求之前的异步请求存在未响应情况时,不向所述响应操作执行模块发送所述第一触发信息,直至等到该异步请求之前的异步请求均已响应时,向所述响应操作执行模块发送所述第一触发信息;

所述响应操作执行模块,还用于基于所述第一触发信息执行该异步请求的响应操作后,将该异步请求的响应操作状态设置为已完成。

在一个实施例中,所述响应操作执行模块,还用于按照所述响应操作的执行顺序将各个异步请求的响应数据作为参数,根据所有响应完成的操作信息进行操作。

本发明实施例实现了如下技术效果:提出了接收用户输入的异步请求定义信息、响应操作的执行顺序和所有响应完成的操作信息后,基于异步请求定义信息和响应操作的执行顺序形成异步请求定义对象,进而并行发送多个异步请求,接收到响应时,针对每个接收到响应的异步请求,实时根据异步请求定义对象中响应操作的执行顺序,判断排序在该异步请求之前的异步请求是否均已响应,若是,则直接执行该异步请求的响应操作;当根据异步请求定义对象中响应操作的执行顺序判断出所有异步请求均已响应时(即所有异步请求的响应完成时),根据所有响应完成的操作信息进行操作,实现了实时基于异步请求的响应状态,按照响应操作的执行顺序依次执行各个异步请求的响应操作,与现有技术相比,可以避免代码执行混乱和逻辑错误等问题,实现了顺序执行的目的,有利于提高程序可靠性;同时,异步请求的响应状态是基于响应接收实时检测的,进而实现响应操作的实时、顺序执行,与现有技术相比,避免使用定时循环任务检测响应状态,有利于减少延时,有利于避免定时循环任务死循环、导致服务器卡死等问题,进而有利于提高服务响应效率,提高前端页面响应速度和用户体验。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

相关技术
  • 执行异步请求响应操作的方法、装置、设备及存储介质
  • 操作执行方法、操作执行装置、电子设备和可读存储介质
技术分类

06120113047405