CN111447262A - 请求发送方法及客户端、存储介质 - Google Patents
请求发送方法及客户端、存储介质 Download PDFInfo
- Publication number
- CN111447262A CN111447262A CN202010209988.8A CN202010209988A CN111447262A CN 111447262 A CN111447262 A CN 111447262A CN 202010209988 A CN202010209988 A CN 202010209988A CN 111447262 A CN111447262 A CN 111447262A
- Authority
- CN
- China
- Prior art keywords
- request
- request sending
- function
- state
- sending function
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/02—Protocols based on web technology, e.g. hypertext transfer protocol [HTTP]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
Abstract
本公开关于一种请求发送方法及客户端、存储介质,涉及通信技术领域,本公开所提供技术方案能够解决相关技术中,在实现HTTP请求的重发时,存在的开发成本大、可扩展性不强的问题的问题。该方案包括:响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数;请求发送函数内封装有向服务端发送目标HTTP请求的执行指令;请求发送函数在被调用时执行执行指令;请求发送函数封装的执行指令的不同执行结果对应请求发送函数的不同状态;监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数;其中,失败状态用于指示请求发送函数封装的执行指令执行失败。本公开应用于HTTP请求发送。
Description
技术领域
本公开涉及通信技术领域,尤其涉及一种请求发送方法及客户端、存储介质。
背景技术
目前,当客户端向服务端发送HTTP(HyperText Transfer Protocol,超文本传输协议)请求时,经常会出现发送失败的情况。因此,在HTTP请求发送失败后,客户端需要重新向服务端发送HTTP请求。
在相关技术中,为了实现HTTP请求的重发,通常采用递归的方式,利用循环函数(例如,for函数)反复执行发送HTTP请求,直至满足循环结束条件(例如,HTTP请求发送成功)后停止循环。
上述相关技术至少存在以下技术问题:在利用循环函数反复执行发送HTTP请求的情况下,在满足循环终止条件(例如,目标HTTP请求发送成功,或者发送次数达到预设次数等)之前,会一直执行重新发送目标HTTP请求。也就是说,上述相关技术中,是将满足循环终止条件作为是否执行下一次发送目标HTTP请求的判断标准。因此,无法在循环过程中扩展其他的逻辑,例如,增加某种特殊情况下停止发送请求(这会与循环终止条件相冲突,从而出现无限循环)。因此上述相关技术存在开发成本大、可扩展性不强的问题。
发明内容
本公开提供一种请求发送方法及客户端、存储介质,以至少解决相关技术中,在实现HTTP请求的重发时,存在的开发成本大、可扩展性不强的问题的问题。本公开的技术方案如下:
第一方面,本公开提供一种请求发送方法,包括:响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数;请求发送函数内封装有向服务端发送目标HTTP请求的执行指令;请求发送函数在被调用时执行执行指令;请求发送函数封装的执行指令的不同执行结果对应请求发送函数的不同状态;监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数;其中,失败状态用于指示请求发送函数封装的执行指令执行失败。
可选的,请求发送函数为Promise函数;监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,包括:监听请求发送函数的状态,在请求发送函数的状态变为rejected的情况下,重新调用请求发送函数。
可选的,监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,包括:监听请求发送函数的状态,在确定请求发送函数的状态变为失败状态后,延迟预设时长后重新调用请求发送函数。
可选的,监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,包括:监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,调用目标定时器函数;目标定时器函数用于延迟预设时长后重新调用请求发送函数。
可选的,在响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之后,方法还包括:监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,清除内存中的定时器函数;监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,包括:在清除内存中的定时器函数之后,重新调用请求发送函数。
可选的,在响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之前,方法还包括:响应于指示向服务端发送目标HTTP请求的请求发送指令,调用预设Promise函数;响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数,包括:执行预设Promise函数中封装的执行调用请求发送函数的执行指令;监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,包括:执行预设Promise函数中封装的执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下重新调用请求发送函数的执行指令;其中,在请求发送函数的状态变为成功状态的情况下,预设Promise函数的状态变为Fullfiled;成功状态用于指示请求发送函数封装的执行指令执行成功。
第二方面,本公开提供一种客户端,包括:请求发送单元,被配置为执行响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数;请求发送函数内封装有向服务端发送目标HTTP请求的执行指令;请求发送函数在被调用时执行执行指令;请求发送函数封装的执行指令的不同执行结果对应请求发送函数的不同状态;请求重发单元,被配置为执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数;其中,失败状态用于指示请求发送函数封装的执行指令执行失败。
可选的,请求发送函数为Promise函数;请求重发单元,具体被配置为执行监听请求发送函数的状态,在请求发送函数的状态变为rejected的情况下,重新调用请求发送函数。
可选的,请求重发单元,具体被配置为执行监听请求发送函数的状态,在确定请求发送函数的状态变为失败状态后,延迟预设时长后重新调用请求发送函数。
可选的,请求重发单元,具体被配置为执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,调用目标定时器函数;目标定时器函数用于延迟预设时长后重新调用请求发送函数。
可选的,客户端,还包括:定时器清除单元;定时器清除单元,被配置为执行在请求发送单元响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之后,监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,清除内存中的定时器函数;请求重发单元,具体被配置为执行在清除内存中的定时器函数之后,重新调用请求发送函数。
可选的,客户端还包括函数调用单元;函数调用单元,被配置为执行在请求发送单元响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之前,响应于指示向服务端发送目标HTTP请求的请求发送指令,调用预设Promise函数;请求发送单元,具体被配置为执行预设Promise函数中封装的执行调用请求发送函数的执行指令;请求重发单元,具体被配置为执行执行预设Promise函数中封装的执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下重新调用请求发送函数的执行指令;其中,在请求发送函数的状态变为成功状态的情况下,预设Promise函数的状态变为Fullfiled;成功状态用于指示请求发送函数封装的执行指令执行成功。
第三方面,本公开提供一种客户端,包括:处理器、用于存储处理器可执行指令的存储器;其中,处理器被配置为执行指令,以实现如第一方面所提供的请求发送方法。
第四方面,本公开提供一种计算机可读存储介质,包括指令,当指令由处理器执行时,使得处理器执行如第一方面所提供的请求发送方法。
第五方面,本公开提供一种计算机程序产品,包括指令,当指令由处理器执行时,使得处理器执行如上述第一方面提供的请求发送方法。
本公开中,考虑到可以将执行向服务端发送目标HTTP请求的内容封装在一个具有执行状态的请求发送函数中,然后当需要向服务端发送目标HTTP请求时,通过调用该请求发送函数来执行发送过程。之后,根据请求发送函数的状态,便可以判断发送过程是否成功执行。当请求发送函数的状态为失败状态时,再通过重复调用该请求发送函数,便可以实现HTTP请求重发的效果。
相比较相关技术中,在满足循环终止条件(例如,目标HTTP请求发送成功,或者发送次数达到预设次数等)之前,会一直执行重新发送目标HTTP请求。也就是说,现有技术中,是将满足循环终止条件,作为是否执行下一次发送目标HTTP请求的判断标准。因此,无法在循环过程中扩展其他的逻辑,例如,增加某种特殊情况下停止发送请求。(这会与循环终止条件相冲突,从而出现无限循环)。
而本申请中,则是采用了根据请求发送函数的状态,来决定是否重新发送目标HTTP请求(即重新调用请求发送函数)的这一技术手段。因此,可以扩展其他逻辑,并不会出现因为与循环终止条件相冲突的问题。从而实现了将发送目标HTTP请求的过程与循环过程进行解偶合。因此可扩展性强,节约了开发成本,能够适用于各种HTTP请求的重发。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种网络结构示意图。
图2是根据一示例性实施例示出的一种请求发送方法的流程示意图之一。
图3是根据一示例性实施例示出的一种请求发送方法的流程示意图之二。
图4是根据一示例性实施例示出的一种请求发送方法的流程示意图之三。
图5是根据一示例性实施例示出的一种请求发送方法的流程示意图之四。
图6是根据一示例性实施例示出的一种请求发送方法的流程示意图之五。
图7是根据一示例性实施例示出的一种请求发送装置的结构示意图之一。
图8是根据一示例性实施例示出的一种请求发送装置的结构示意图之二。
图9是根据一示例性实施例示出的一种请求发送装置的结构示意图之三。
图10是根据一示例性实施例示出的一种请求发送装置的结构示意图之四。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
另外,在本公开实施例的描述中,除非另有说明,“/”表示或的意思,例如,A/B可以表示A或B;本文中的“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,在本公开实施例的描述中,“多个”是指两个或多于两个。
首先,对本公开所涉及的技术术语进行介绍:
HTTP(HyperText Transfer Protocol,超文本传输协议):指一种网络协议,是一个客户端与服务器请求和应答的标准。其中,采用HTTP协议,从客户端到服务器端的请求消息被称为HTTP请求。
JavaScript:简称“JS”,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。常被作为开发Web页面的脚本语音。
Node.Js:一种使JavaScript运行在服务端的环境平台。
Promise:一种构造函数。将Promise实例化后,得到Promise对象(或者称为Promise函数)。Promise对象有以下两个特点:
(1)Promise对象的状态不受外界影响。Promise对象代表一个异步操作(以本公开为例,这个异步操作可以为向服务端发送HTTP请求),Promise对象有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。这三种状态分别代表:异步操作正在进行中、异步操作执行成功、异步操作执行失败。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
(2)Promise对象的一旦状态改变,就不会再变。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为resolved(已定型)。如果改变已经发生了,再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果错过了它,再去监听,是得不到结果的。
以下,对本公开所提供的技术方案的应用场景进行介绍:
参考图1,其示出本公开实施例所可能涉及的一种实施环境示意图。如图1所示,该实施环境可以包括服务器101和多个终端设备(如终端设备102a、终端设备102b、终端设备102c和终端设备102d),多个终端设备具体可以通过有线网络或者无线网络与服务器101连接。
示例性的,本公开实施例中的终端设备可以是手机、平板电脑、桌面型、膝上型、手持计算机、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本,以及蜂窝电话、个人数字助理(personal digital assistant,PDA)、增强现实(augmented reality,AR)\虚拟现实(virtual reality,VR)设备等可以安装即时通讯应用,并使用即时通讯应用通信的设备,本公开实施例对该电子设备的具体形态不作特殊限制。
在一些应用场景下,图1中多个终端设备中的任一个可以作为客户端,通过执行本公开所提供的请求发送方法,向作为服务端的服务器101发送HTTP请求。
在另外一些应用场景下,服务器101也可以运行相应的JavaScript运行环境,并通过执行本公开所提供请求发送方法,向其他服务器或者终端设备发送HTTP请求。对此,本公开可以不做限制。
下面,对本公开的发明构思进行介绍:
目前,当客户端向服务端发送HTTP(HyperText Transfer Protocol,超文本传输协议)请求时,经常会出现发送失败的情况。因此,在HTTP请求发送失败后,客户端需要重新向服务端发送HTTP请求。
在相关技术中,为了实现HTTP请求的重发,通常采用递归的方式,利用循环函数(例如,for函数)反复执行发送HTTP请求,直至满足循环结束条件(例如,HTTP请求发送成功)后停止循环。
上述相关技术在实施的过程中,在利用循环函数执行HTTP请求的重发时,需要根据上一次目标HTTP请求的发送结果(成功或失败)决定是否重新发送目标HTTP请求。进而导致针对不同类型的HTTP请求,需要不同的循环逻辑(例如,循环的开始条件,循环内容,结束条件等)来实现HTTP请求的重发,因此存在开发成本大、可扩展性不强的问题。
本公开中,考虑到可以将执行向服务端发送目标HTTP请求的内容封装在一个具有执行状态的请求发送函数(例如,Promise函数)中,然后当需要向服务端发送目标HTTP请求时,通过调用该请求发送函数来执行发送过程。之后,便根据请求发送函数的状态,判断发送过程是否成功执行。当请求发送函数的状态为失败状态时,通过重复调用该请求发送函数,便可以实现HTTP请求重发的效果。
相比较相关技术中,在满足循环终止条件(例如,目标HTTP请求发送成功,或者发送次数达到预设次数等)之前,会一直执行重新发送目标HTTP请求。也就是说,现有技术中,是将满足循环终止条件,作为是否执行下一次发送目标HTTP请求的判断标准。因此,无法在循环过程中扩展其他的逻辑,例如,增加某种特殊情况下停止发送请求。(这会与循环终止条件相冲突,从而出现无限循环)。
而本申请中,则是采用了根据请求发送函数的状态,来决定是否重新发送目标HTTP请求(即重新调用请求发送函数)的这一技术手段。因此,可以扩展其他逻辑,并不会出现因为与循环终止条件相冲突的问题。从而实现了将发送目标HTTP请求的过程与循环过程进行解偶合。因此可扩展性强,节约了开发成本,能够适用于各种HTTP请求的重发。
另外,本公开所提供技术方案中,采用了根据请求发送函数的状态,来决定是否重新发送目标HTTP请求(即重新调用请求发送函数)的这一技术手段。从而实现了将发送目标HTTP请求的过程与循环过程进行解偶合,进而当发送不同类型的HTTP请求时,只需要对请求发送函数中的相应部分进行修改,即可实现不同类型HTTP请求的重发。因此可扩展性强,节约了开发成本,能够适用于各种HTTP请求的重发。
基于上述发明构思,以下结合实例,对本公开的技术方案进行介绍:
实施例一:
本公开提供一种请求发送方法,该方法可以应用于客户端。其中,客户端具体可以为各类电子设备。示例性的,客户端可以为图1中的多个终端设备中的一个,作为客户端的终端设备可以通过执行本公开所提供的请求发送方法,向作为服务端的服务器101发送HTTP请求。或者在一些情况下当服务器101上运行用相应的JavaScript运行环境时,客户端也可以为图1中的服务器101。此时,服务器101可以通过执行本公开所提供的请求发送方法,向作为服务端的其他服务器或者终端设备发送HTTP请求。
当将该方法应用于客户端的情况下,如图2所示,该方法包括以下步骤S201-S202:
S201、客户端响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数。
其中,请求发送函数内封装有向服务端发送目标HTTP请求的执行指令。
请求发送函数在被调用时执行执行指令。请求发送函数封装的执行指令的不同执行结果对应请求发送函数的不同状态。
实例性的,本公开实施例中,请求发送指令,可以是客户端中用于触发向服务端发送目标HTTP请求的任意指令。例如,请求发送指令,可以是用户鼠标点击浏览器中打开某个脚本的点击操作后,客户端中生成的用于触发客户端向服务器发送获取该脚本内容数据的其他指令。
另外,本公开实施例中,所称目标HTTP请求,具体可以是各种在发生成功之前需要重复发送的HTTP请求。例如,目标HTTP请求,可以为ajax(Asynchronous Javascript AndXML,异步JavaScript和XML)请求。再例如,目标HTTP请求,可以为Node.Js发送的request请求,grpc(Google remote procedure call,Google远程过程调用)请求,等等。
另外,本公开实施例中,请求发送函数,具体可以为一个容器,里面保存着执行向服务端发送目标HTTP请求的结果。
在请求发送函数在被调用时,客户端可以执行封装在请求发送函数内的向服务端发送目标HTTP请求的程序指令,并在该程序指令执行完毕后,根据执行结果(发送成功或发送失败)改变请求发送函数的状态。具体的,执行失败后将请求发送函数的状态设置为失败状态。
另外,请求发送函数还可以在向服务端发送目标HTTP请求的程序指令执行成功后,将请求发送函数的状态设置为成功状态。以便客户端从请求发送函数外部,监听到发送目标HTTP请求的结果。
具体的,请求发送函数可以是Promise函数(或称为Promise对象)。进而,可以通过在请求发送函数内,当向服务端发送目标HTTP请求执行成功时,调用resolve函数,使请求发送函数的状态被设置为fulfilled(即成功状态);当向服务端发送目标HTTP请求执行失败时,调用reject函数,使请求发送函数的状态被设置为rejected(即失败状态)。
实例性的,可以声明有一个名为getListRequestHttp的Function(函数),在getListRequestHttp中,用Promise函数封装一个$.ajax请求(即目标HTTP请求)。其中,在Promise函数中,当$.ajax请求执行成功时,调用resolve函数将该Promise函数的状态设置为fulfilled;当$.ajax请求执行失败时,调用reject函数将该Promise函数的状态设置为rejected。
另外,本公开实施例中,向服务端发送目标HTTP请求执行失败,具体可以包括在执行封装在请求发送函数内的向服务端发送目标HTTP请求的程序指令过程中,根据程序指令中的判别指令确认执行失败;还可以包括,发送超时等情况。
S202、客户端监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数。
其中,失败状态用于指示请求发送函数封装的执行指令执行失败。
具体的,当请求发送函数为Promise函数时,步骤S202具体包括:监听请求发送函数的状态,在请求发送函数的状态变为rejected的情况下,重新调用请求发送函数。
实例性的,Promise函数可以通过.then和.catch监听Promise函数的状态。进而,执行不同的回调函数。当Promise函数变为rejected状态(失败状态)的情况下,通过.catch()执行相应的回调函数。
具体的,本公开实施例中,调用请求发送函数,具体可以是调用封装有请求发送函数的指令的函数。例如,函数A中封装有调用请求发送函数的指令,则可以通过调用函数A来实现调用请求发送函数的过程。
在一种实现方式中,考虑到当服务端的数据处理压力较大时,若客户端过于频繁的向服务端发送HTTP请求,不仅无法使请求成功发送,还会进一步增加服务端的负荷。因此,如图3所示,本公开中,上述步骤S202,具体包括:
S202a、客户端监听请求发送函数的状态,在确定请求发送函数的状态变为失败状态后,延迟预设时长后重新调用请求发送函数。
本公开中,在请求发送函数的状态被设置为失败状态后,通过延迟预设时长后再重新调用请求发送函数以重新向服务端发送目标HTTP请求的方式,能够降低客户端发送HTTP请求的频率,从而可以缓解服务端的运行压力,提高服务端的运行效率,进而提高用户使用体验。
在一种实现方式中,考虑到可以声明一个定时器变量,进而在请求发送函数的状态被设置为失败状态后,可以通过调用目标定时器函数,实现延迟预设时长后重新调用请求发送函数的效果。进而,如图4所示,本公开中,上述步骤S202a,具体包括:
S202b、客户端监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,调用目标定时器函数。
其中,目标定时器函数用于延迟预设时长后重新调用请求发送函数。
进一步的,考虑到通过调用目标定时器函数,实现延迟预设时长后重新调用请求发送函数时,由于存在循环调用请求发送函数的情况,因此每次调用请求发送函数时都会对应生成一个定时器函数,最终可能导致内存中保存有多个定时器函数。当循环次数不断增加时,会导致内存溢出的问题。因此,本公开中,考虑到在每次重新调用请求发送函数之前,先对内存中的定时器函数记性清除。进而可以避免内存中保存有多个定时器函数的问题。
因此,如图5所示,本公开上述请求发送方法,在执行步骤S201客户端响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之后,该方法还包括:
S203、客户端监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,清除内存中的定时器函数。
上述步骤S202b监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,具体包括:
S202c、在清除内存中的定时器函数之后,重新调用请求发送函数。
实例性的,可以声明一种getListRequestHttpPromise函数。其中,在getListRequestHttpPromise函数中,声明了一个名为attempt的函数。在attempt函数中,先通过window.clearTimeout(setTimeoutTimer)指令,清除内存中的定时器函数。然后,调用上述实例中多提供的getListRequestHttp(即请求发送函数)。然后通过.catch()获取getListRequestHttp函数的状态为reject后,调用setTimeoutTimer(即目标定时器函数),以使得延迟5000ms后,重新调用attempt(即通过调用attempt函数,实现调用请求发送函数)。
在另一种实现方式中,为了避免目标HTTP请求的重复发送过程对其他流程的影响,本公开中还可以将上述步骤S201-S202的内容,封装在一个预设Promise函数中。该预设Promise函数,用于调用请求发送函数,并响应于请求发送函数的状态被设置为失败状态重新调用请求发送函数,或者响应于请求发送函数的状态被设置为成功状态将预设Promise函数的状态设置为Fullfiled。
其中,请求发送函数,用于执行向服务端发送目标HTTP请求,并在执行失败后将请求发送函数的状态设置为失败状态,或者,在执行成功后将请求发送函数的状态设置为成功状态。
因此,如图6所示,在步骤S201之前,该方法还包括:
S301、客户端响应于指示向服务端发送目标HTTP请求的请求发送指令,调用预设Promise函数。
进一步的,步骤S201客户端响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数,可以包括:
S302、客户端执行预设Promise函数中封装的执行调用请求发送函数的执行指令。
步骤S202客户端监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数,包括:
S303、客户端执行预设Promise函数中封装的执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下重新调用请求发送函数的执行指令。
其中,在请求发送函数的状态变为成功状态的情况下,预设Promise函数的状态变为Fullfiled;成功状态用于指示请求发送函数封装的执行指令执行成功。
本公开上述实现方式中,考虑到由于Promise函数内封装的执行指令的执行结果,对于注册Promise函数的回调函数没有直接影响。也就是说,在Promise函数内封装的执行指令的得到执行结果之前或者得到执行结果之后,都可以注册Promise函数的回调函数。因此,本公开上述实施例中,通过响应于指示向服务端发送目标HTTP请求的请求发送指令,调用上述预设Promise函数的方法,可以在实现本公开上述请求发送方法所实现的技术效果外,还能够使目标HTTP请求的重复发送过程与其他待执行流程之间解偶合,避免目标HTTP请求的重复发送过程对其他流程的影响。
另外,在一种实现方式中,上述预设Promise函数,还用于声明目标定时器函数以及目标定时器函数所延迟的预设时长的时间长度。
实例性的,上述实例中所声明的getListRequestHttpPromise函数,即为一种预设Promise函数的实例。其中,getListRequestHttpPromise函数中,声明了目标定时器函数setTimeoutTimer,还声明了预设时长的时间长度interval为5000(ms)。另外,getListRequestHttpPromise函数中,还声明了一个attempt函数。通过调用attempt函数能够实现调用请求发送函数,并响应于请求发送函数的状态被设置为失败状态重新调用请求发送函数,或者响应于请求发送函数的状态被设置为成功状态将预设Promise函数的状态设置为Fullfiled的效果。
本公开中,考虑到可以将执行向服务端发送目标HTTP请求的内容封装在一个具有执行状态的请求发送函数中,然后当需要向服务端发送目标HTTP请求时,通过调用该请求发送函数来执行发送过程。之后,便根据请求发送函数的状态,判断发送过程是否成功执行。当请求发送函数的状态为失败状态时,通过重复调用该请求发送函数,便可以实现HTTP请求重发的效果。
相比相关技术中,根据上一次目标HTTP请求是否发送成功,来决定是否重新发送目标HTTP请求。本公开所提供技术方案中,采用了根据请求发送函数的状态,来决定是否重新发送目标HTTP请求(即重新调用请求发送函数)的这一技术手段。从而实现了将发送目标HTTP请求的过程与循环过程进行解偶合,进而当发送不同类型的HTTP请求时,只需要对请求发送函数中的相应部分进行修改,即可实现不同类型HTTP请求的重发。因此可扩展性强,节约了开发成本,能够适用于各种HTTP请求的重发。
实施例二:
本公开还提供一种客户端,参照图7,该客户端40包括:请求发送单元401、请求重发单元402。其中:
请求发送单元401,被配置为执行响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数;请求发送函数内封装有向服务端发送目标HTTP请求的执行指令;请求发送函数在被调用时执行执行指令;请求发送函数封装的执行指令的不同执行结果对应请求发送函数的不同状态;
请求重发单元402,被配置为执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,重新调用请求发送函数;其中,失败状态用于指示请求发送函数封装的执行指令执行失败。
可选的,请求发送函数为Promise函数;
请求重发单元402,具体被配置为执行监听请求发送函数的状态,在请求发送函数的状态变为rejected的情况下,重新调用请求发送函数。
可选的,请求重发单元402,具体被配置为执行监听请求发送函数的状态,在确定请求发送函数的状态变为失败状态后,延迟预设时长后重新调用请求发送函数。
可选的,请求重发单元402,具体被配置为执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,调用目标定时器函数;目标定时器函数用于延迟预设时长后重新调用请求发送函数。
可选的,如图8所示,客户端40,还包括:定时器清除单元403;
定时器清除单元403,被配置为执行在请求发送单元401响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之后,监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下,清除内存中的定时器函数;
请求重发单元402,具体被配置为执行在清除内存中的定时器函数之后,重新调用请求发送函数。
可选的,如图9所示,客户端还包括函数调用单元404;
函数调用单元404,被配置为执行在请求发送单元响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之前,响应于指示向服务端发送目标HTTP请求的请求发送指令,调用预设Promise函数;
请求发送单元401,具体被配置为执行预设Promise函数中封装的执行调用请求发送函数的执行指令;
请求重发单元402,具体被配置为执行执行预设Promise函数中封装的执行监听请求发送函数的状态,在请求发送函数的状态变为失败状态的情况下重新调用请求发送函数的执行指令;
其中,在请求发送函数的状态变为成功状态的情况下,预设Promise函数的状态变为Fullfiled;成功状态用于指示请求发送函数封装的执行指令执行成功。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图10是本公开提供的另一种客户端的结构示意图。如图10,该客户端50可以包括至少一个处理器501以及用于存储处理器可执行指令的存储器503。其中,处理器501被配设置为执行存储器503中的指令,以实现上述实施例中的请求发送方法。
示例性的,在图1所示的实施环境中,客户端50可以图1所示的服务器101或者多个终端设备中的一个。
另外,客户端50还可以包括通信总线502以及至少一个通信接口504。
处理器501可以是一个处理器(central processing units,CPU),微处理单元,ASIC,或一个或多个用于控制本公开方案程序执行的集成电路。
通信总线502可包括一通路,在上述组件之间传送信息。
通信接口504,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(radio access network,RAN),无线局域网(wireless local areanetworks,WLAN)等。
存储器503可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器可以是独立存在,通过总线与处理单元相连接。存储器也可以和处理单元集成在一起。
其中,存储器503用于存储执行本公开方案的指令,并由处理器501来控制执行。处理器501用于执行存储器503中存储的指令,从而实现本公开方法中的功能。
在具体实现中,作为一种实施例,处理器501可以包括一个或多个CPU,例如图10中的CPU0和CPU1。
在具体实现中,作为一种实施例,客户端50可以包括多个处理器,例如图10中的处理器501和处理器507。这些处理器中的每一个可以是一个单核(single-CPU)处理器,也可以是一个多核(multi-CPU)处理器。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
在具体实现中,作为一种实施例,客户端50还可以包括输出设备505和输入设备506。输出设备505和处理器501通信,可以以多种方式来显示信息。例如,输出设备505可以是液晶显示器(liquid crystal display,LCD),发光二级管(light emitting diode,LED)显示设备,阴极射线管(cathode ray tube,CRT)显示设备,或投影仪(projector)等。输入设备506和处理器501通信,可以以多种方式接受用户的输入。例如,输入设备506可以是鼠标、键盘、触摸屏设备或传感设备等。
本领域技术人员可以理解,图10中示出的结构并不构成对客户端50的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
另外,本公开还提供一种计算机可读存储介质,包括指令,当指令由处理器执行时,使得处理器执行如上述实施例所提供的请求发送方法。
另外,本公开还提供一种计算机程序产品,包括指令,当指令由处理器执行时,使得处理器执行如上述实施例所提供的请求发送方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
Claims (10)
1.一种请求发送方法,其特征在于,包括:
响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数;所述请求发送函数内封装有向所述服务端发送所述目标HTTP请求的执行指令;所述请求发送函数在被调用时执行所述执行指令;所述请求发送函数封装的所述执行指令的不同执行结果对应所述请求发送函数的不同状态;
监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数;其中,所述失败状态用于指示所述请求发送函数封装的所述执行指令执行失败。
2.根据权利要求1所述请求发送方法,其特征在于,所述请求发送函数为Promise函数;
所述监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数,包括:
监听所述请求发送函数的状态,在所述请求发送函数的状态变为rejected的情况下,重新调用所述请求发送函数。
3.根据权利要求1所述请求发送方法,其特征在于,所述监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数,包括:
监听所述请求发送函数的状态,在确定所述请求发送函数的状态变为失败状态后,延迟预设时长后重新调用所述请求发送函数。
4.根据权利要求1所述请求发送方法,其特征在于,所述监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数,包括:
监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,调用目标定时器函数;所述目标定时器函数用于延迟预设时长后重新调用所述请求发送函数。
5.根据权利要求4所述请求发送方法,其特征在于,在所述响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之后,所述方法还包括:
监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,清除内存中的定时器函数;
所述监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数,包括:
在清除内存中的定时器函数之后,重新调用所述请求发送函数。
6.根据权利要求1-5任一项所述请求发送方法,其特征在于,在所述响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数之前,所述方法还包括:
响应于指示向服务端发送目标HTTP请求的请求发送指令,调用预设Promise函数;
所述响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数,包括:执行所述预设Promise函数中封装的执行调用所述请求发送函数的执行指令;
所述监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数,包括:执行所述预设Promise函数中封装的执行监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下重新调用所述请求发送函数的执行指令;
其中,在所述请求发送函数的状态变为成功状态的情况下,所述预设Promise函数的状态变为Fullfiled;所述成功状态用于指示所述请求发送函数封装的所述执行指令执行成功。
7.一种客户端,其特征在于,包括:
请求发送单元,被配置为执行响应于指示向服务端发送目标HTTP超文本传输协议请求的请求发送指令,调用请求发送函数;所述请求发送函数内封装有向所述服务端发送所述目标HTTP请求的执行指令;所述请求发送函数在被调用时执行所述执行指令;所述请求发送函数封装的所述执行指令的不同执行结果对应所述请求发送函数的不同状态;
请求重发单元,被配置为执行监听所述请求发送函数的状态,在所述请求发送函数的状态变为失败状态的情况下,重新调用所述请求发送函数;其中,所述失败状态用于指示所述请求发送函数封装的所述执行指令执行失败。
8.根据权利要求7所述客户端,其特征在于,所述请求发送函数为Promise函数;
所述请求重发单元,具体被配置为执行监听所述请求发送函数的状态,在所述请求发送函数的状态变为rejected的情况下,重新调用所述请求发送函数。
9.一种客户端,其特征在于,包括:处理器、用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行指令,以实现如权利要求1-6任一项所提供的请求发送方法。
10.一种计算机可读存储介质,其特征在于,包括指令,当指令由处理器执行时,使得处理器执行如权利要求1-6任一项所提供的请求发送方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010209988.8A CN111447262A (zh) | 2020-03-23 | 2020-03-23 | 请求发送方法及客户端、存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010209988.8A CN111447262A (zh) | 2020-03-23 | 2020-03-23 | 请求发送方法及客户端、存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111447262A true CN111447262A (zh) | 2020-07-24 |
Family
ID=71652361
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010209988.8A Pending CN111447262A (zh) | 2020-03-23 | 2020-03-23 | 请求发送方法及客户端、存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111447262A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114553928A (zh) * | 2021-12-31 | 2022-05-27 | 完美世界(重庆)互动科技有限公司 | 一种业务处理方法以及装置、电子设备、介质 |
CN116107778A (zh) * | 2023-04-13 | 2023-05-12 | 深圳复临科技有限公司 | 前端事件应答实现方法、装置、终端设备和可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015142102A1 (en) * | 2014-03-20 | 2015-09-24 | Samsung Electronics Co., Ltd. | Method and apparatus for dash streaming using http streaming |
CN109992256A (zh) * | 2019-03-11 | 2019-07-09 | 宸瑞普惠(广州)科技有限公司 | 可跨平台的高复用性网络架构及其实现方法 |
CN110034857A (zh) * | 2019-04-17 | 2019-07-19 | 广东三维家信息科技有限公司 | 请求发送的方法、装置以及电子设备 |
-
2020
- 2020-03-23 CN CN202010209988.8A patent/CN111447262A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015142102A1 (en) * | 2014-03-20 | 2015-09-24 | Samsung Electronics Co., Ltd. | Method and apparatus for dash streaming using http streaming |
CN109992256A (zh) * | 2019-03-11 | 2019-07-09 | 宸瑞普惠(广州)科技有限公司 | 可跨平台的高复用性网络架构及其实现方法 |
CN110034857A (zh) * | 2019-04-17 | 2019-07-19 | 广东三维家信息科技有限公司 | 请求发送的方法、装置以及电子设备 |
Non-Patent Citations (1)
Title |
---|
邓森泉等: "Promise方式实现Node.js应用的实践", 《计算机系统应用》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114553928A (zh) * | 2021-12-31 | 2022-05-27 | 完美世界(重庆)互动科技有限公司 | 一种业务处理方法以及装置、电子设备、介质 |
CN114553928B (zh) * | 2021-12-31 | 2024-04-16 | 完美世界(重庆)互动科技有限公司 | 一种业务处理方法以及装置、电子设备、介质 |
CN116107778A (zh) * | 2023-04-13 | 2023-05-12 | 深圳复临科技有限公司 | 前端事件应答实现方法、装置、终端设备和可读存储介质 |
CN116107778B (zh) * | 2023-04-13 | 2023-07-11 | 深圳复临科技有限公司 | 前端事件应答实现方法、装置、终端设备和可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7937619B2 (en) | Fine grained failure detection in distributed computing | |
KR102407334B1 (ko) | 게이트웨이 장치 및 그 동작 방법 | |
CN110413384B (zh) | 延时任务处理方法及装置、存储介质、电子设备 | |
CN111447262A (zh) | 请求发送方法及客户端、存储介质 | |
CN110049090B (zh) | 配置微服务架构中的自适应断路器链的方法、系统 | |
CN107645476B (zh) | 请求处理方法和装置 | |
CN108900627B (zh) | 一种网络请求方法、终端装置及存储介质 | |
CN111200606A (zh) | 深度学习模型任务处理方法、系统、服务器及存储介质 | |
CN111694620A (zh) | 第三方业务的交互方法、装置、设备及计算机存储介质 | |
CN112653736B (zh) | 一种并行回源方法、装置及电子设备 | |
CN112015383A (zh) | 一种登录方法和装置 | |
CN107438097B (zh) | 网络请求处理方法及装置 | |
CN106599045B (zh) | 一种请求发送方法及装置 | |
CN103051722B (zh) | 一种确定页面是否被劫持的方法及相关设备 | |
CN112583879A (zh) | 请求的处理方法、装置及系统、存储介质和电子设备 | |
CN114115941A (zh) | 资源发送方法、页面渲染方法、装置、电子设备和介质 | |
CN113010330A (zh) | 一种微服务请求重试的方法及终端 | |
CN114500484A (zh) | 页面渲染方法、装置、电子设备及可读介质 | |
CN112540804A (zh) | 小程序运行方法及装置、电子设备、介质 | |
CN113722115A (zh) | 调用接口的方法、装置、设备和计算机可读介质 | |
CN112395194A (zh) | 一种接入测试平台的方法和装置 | |
CN111752728A (zh) | 消息传输方法及装置 | |
CN110764932A (zh) | 数据处理方法、系统、介质和计算设备 | |
CN114448703B (zh) | 请求处理方法、装置、电子设备及存储介质 | |
CN113206872B (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20200724 |
|
RJ01 | Rejection of invention patent application after publication |