本发明涉及通信技术领域,尤其涉及基于延迟队列的会话保持方法、服务器及可读存储介质。
背景技术:
客户端在与服务器建立连接后,服务器需要判断客户端是否与服务器保持会话状态。而服务器通常会连接多个客户端,因此,服务器需要多个线程对客户端与服务器之间会话状态进行判断,从而使得服务器需要消耗大量的cpu资源,影响服务器的运行速度。也即现有技术中存在服务器与客户端的会话状态确定耗费的cpu资源较大的问题。
技术实现要素:
本发明的主要目的在于提供一种基于延迟队列的会话保持方法、服务器及可读存储介质,旨在解决服务器与客户端的会话状态确定耗费的cpu资源较大的问题。
为实现上述目的,本发明提供一种基于延迟队列的会话保持方法,所述基于延迟队列的会话保持方法包括以下步骤:
服务器与客户端建立通信连接后,生成所述客户端对应的会话对象,并将所述会话对象列入延迟队列的队尾;
将位于所述延迟队列队头的会话对象确定为第一目标会话对象;
向所述第一目标会话对象对应的目标客户端发送探测信息,以判断所述目标客户端是否与所述服务器保持会话,其中,在所述服务器向所述目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。
在一实施例中,所述将位于所述延迟队列队头的会话对象确定为第一目标会话对象的步骤之后,还包括:
在所述第一目标会话对象的会话超时时,执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤。
在一实施例中,所述将位于所述延迟队列队头的会话对象确定为第一目标会话对象的步骤之后,还包括:
在所述第一目标会话对象的会话超时时,从所述延迟队列中取出所述第一目标会话对象,并执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤。
在一实施例中,所述从所述延迟队列中取出所述第一目标会话对象的步骤之后,还包括:
确定所述第一目标会话对象的最后更新时间与所述第一目标会话对象在所述延迟队列的入队时间是否一致,其中,所述服务器每接收到所述目标客户端发送信息时,将所述最后更新时间更新为所述服务器接收所述信息的系统时间戳;
在所述最后更新时间与所述入队时间一致时,执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤;
在所述最后更新时间与所述入队时间不一致时,根据所述最后更新时间与所述入队时间之间的差值更新所述第一目标会话对象在所述延迟队列中的滞留时长,并将所述入队时间更新为所述最后更新时间;
按照更新后的入队时间以及滞留时长,将所述第一目标会话对象重新列入所述延迟队列中。在一实施例中,所述服务器通过第一线程从所述延迟队列中取出所述第一目标会话对象、通过所述第一线程确定所述延迟队列中的第一目标会话对象以及通过第二线程向所述目标客户端发送探测信息。
在一实施例中,当所述第一目标会话对象在所述延迟队列的滞留时长达到第一预设时长时,所述第一目标会话对象的会话超时。
在一实施例中,所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤之后,还包括:
在第二预设时长内接收到所述目标客户端基于所述探测信息发送的响应信息时,将所述第一目标会话对象在所述延迟队列的滞留时长清零,以将所述第一目标会话对象列入所述延迟队列的队尾;
在第二预设时长内未接收到所述目标客户端基于所述信息发送的响应信息时,断开与所述目标客户端的连接,并删除所述第一目标会话对象。
在一实施例中,所述生成所述客户端对应的会话对象,并将所述会话对象列入延迟队列的队尾的步骤之后,还包括:
接收到客户端发送的信息,并在所述延迟队列中确定发送信息的客户端对应的第二目标会话对象;
将所述第二目标会话对象在所述延迟队列的滞留时长清零,以将所述第二目标会话对象列入所述延迟队列的队尾。
为实现上述目的,本发明还提供一种服务器,所述服务器包括存储器、处理器以及存储在所述存储器并可在所述处理器上运行的基于延迟队列的会话保持程序,所述基于延迟队列的会话保持程序被所述处理器执行时实现如上所述的基于延迟队列的会话保持方法的各个步骤。
为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质包括基于延迟队列的会话保持程序,所述基于延迟队列的会话保持程序被处理器执行时实现如上所述的基于延迟队列的会话保持方法的各个步骤。
本发明提供的基于延迟队列的会话保持方法、服务器及计算机可读存储介质,服务器与客户端建立通信连接后,生成客户端对应的会话对象,并将会话对象列入延迟队列的队尾,再将位于延迟队列对头的会话对象确定为目标会话对象,从而向目标会话对象对应的目标客户端发送探测信息以判断目标客户端是否与服务器保持会话,且在服务器向目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。由于服务器在向延迟队列对头的目标会话对象发送探测信息,并将延迟队列对头的会话对象进行更换,使得服务器依次对延迟队列中对头的会话对象进行服务器与客户端的会话是否保持的判断,服务器无需同时判断多个客户端是否与服务器保持会话状态,服务器与客户端的会话状态的判断所耗费的cpu较小,也即服务器所耗费的cpu资源以及网络带宽资源较少。
附图说明
图1为本发明实施例涉及的服务器的硬件结构示意图;
图2为本发明基于延迟队列的会话保持方法第一实施例的流程示意图;
图3为本发明基于延迟队列的会话保持方法第二实施例的流程示意图;
图4为本发明基于延迟队列的会话保持方法第三实施例的流程示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供一种解决方案:服务器与客户端建立通信连接后,生成所述客户端对应的会话对象,并将所述会话对象列入延迟队列的队尾;将位于所述延迟队列队头的会话对象确定为第一目标会话对象;向所述第一目标会话对象对应的目标客户端发送探测信息,以判断所述目标客户端是否与所述服务器保持会话,其中,在所述服务器向所述目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。
由于服务器在向延迟队列对头的目标会话对象发送探测信息,并将延迟队列对头的会话对象进行更换,使得服务器依次对延迟队列中对头的会话对象进行服务器与客户端的会话是否保持的判断,服务器无需同时判断多个客户端是否与服务器保持会话状态,服务器与客户端的会话状态的判断所耗费的cpu较小,也即服务器所耗费的cpu资源以及网络带宽资源较少。
如图1所示,图1是本发明实施例方案涉及的服务器的硬件结构示意图。
如图1所示,服务器可以包括:处理器1001,例如中央处理器(cpu),通信总线1002、用户接口1003,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display),可选用户接口1003还可以包括标准的有线接口以及无线接口,而用户接口1003的有线接口在本发明中可为通用串行总线(universalserialbus,usb)接口。存储器1005可以是高速随机存取存储器(ram);也可以是稳定的存储器,比如,非易失存储器,具体可为,磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
本领域技术人员可以理解,图1中示出的会话保持设备结构并不构成对会话保持设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括:操作系统、网络通信模块、用户接口模块、以及基于延迟队列的会话保持程序。在图1中,网络通信模块主要用于与连接客户端,与客户端进行数据通信,而处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
服务器与客户端建立通信连接后,生成所述客户端对应的会话对象,并将所述会话对象列入延迟队列的队尾;
将位于所述延迟队列队头的会话对象确定为第一目标会话对象;
向所述第一目标会话对象对应的目标客户端发送探测信息,以判断所述目标客户端是否与所述服务器保持会话,其中,在所述服务器向所述目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。
在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
在所述第一目标会话对象的会话超时时,执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤。
在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
在所述第一目标会话对象的会话超时时,从所述延迟队列中取出所述第一目标会话对象,并执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤。
在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
确定所述第一目标会话对象的最后更新时间与所述第一目标会话对象在所述延迟队列的入队时间是否一致,其中,所述服务器每接收到所述目标客户端发送信息时,将所述最后更新时间更新为所述服务器接收所述信息的系统时间戳;
在所述最后更新时间与所述入队时间一致时,执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤;
在所述最后更新时间与所述入队时间不一致时,根据所述最后更新时间与所述入队时间之间的差值更新所述第一目标会话对象在所述延迟队列中的滞留时长,并将所述入队时间更新为所述最后更新时间;
按照更新后的入队时间以及滞留时长,将所述第一目标会话对象重新列入所述延迟队列中。在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
所述服务器通过第一线程从所述延迟队列中取出所述第一目标会话对象、通过所述第一线程确定所述延迟队列中的第一目标会话对象以及通过第二线程向所述目标客户端发送探测信息。
在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
当所述第一目标会话对象在所述延迟队列的滞留时长达到第一预设时长时,所述第一目标会话对象的会话超时。
在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
在第二预设时长内接收到所述目标客户端基于所述探测信息发送的响应信息时,将所述第一目标会话对象在所述延迟队列的滞留时长清零,以将所述第一目标会话对象列入所述延迟队列的队尾;
在第二预设时长内未接收到所述目标客户端基于所述信息发送的响应信息时,断开与所述目标客户端的连接,并删除所述第一目标会话对象。
在一实施例中,处理器1001可以用于调用存储器1005中存储的基于延迟队列的会话保持程序,并执行以下操作:
接收到客户端发送的信息,并在所述延迟队列中确定发送信息的客户端对应的第二目标会话对象;
将所述第二目标会话对象在所述延迟队列的滞留时长清零,以将所述第二目标会话对象列入所述延迟队列的队尾。
本实施例根据上述方案,服务器与客户端建立通信连接后,生成客户端对应的会话对象,并将会话对象列入延迟队列的队尾,再将位于延迟队列对头的会话对象确定为目标会话对象,从而向目标会话对象对应的目标客户端发送探测信息以判断目标客户端是否与服务器保持会话,且在服务器向目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。由于服务器在向延迟队列对头的目标会话对象发送探测信息,并将延迟队列对头的会话对象进行更换,使得服务器依次对延迟队列中对头的会话对象进行服务器与客户端的会话是否保持的判断,服务器无需同时判断多个客户端是否与服务器保持会话状态,服务器与客户端的会话状态的判断所耗费的cpu较小,也即服务器所耗费的cpu资源以及网络带宽资源较少。
基于上述服务器的硬件构架,提出本发明基于延迟队列的会话保持方法的各个实施例。
参照图2,图2为本发明基于延迟队列的会话保持方法的第一实施例,所述基于延迟队列的会话保持方法包括以下步骤:
步骤s10,服务器与客户端建立通信连接后,生成所述客户端对应的会话对象,并将所述会话对象列入延迟队列的队尾;
在本实施例中,执行的主体为服务器,该服务器可为游戏服务器、财务服务器、数据库服务器等。客户端可通过超文本传输协议(http)、传输控制协议/网际协议(tcp/ip)、电子邮件协议(mailto)、用户数据报协议(udp)等多种通讯协议与服务器通信连接,也即服务器与客户端之间的会话可以为tcp会话、http会话、mailto会话以及udp会话等。
服务器中设有延迟队列。在当服务器与客户端建立通信连接后,服务器生成客户端对应的会话对象,再将会话对象列入延迟队列的队尾。可以理解的是,延迟队列中的各个会话对象是按照会话对象生成时间从早到晚进行排序的,生成时间越早,会话对象则越接近延迟队列的对头位置。需要说明的是,服务器在与客户端连接后,会对客户端进行验证,验证通过后,建立客户端对应的会话对象,在建立会话对象时,会为会话对象生成sessionid,sessionid为会话对象的标识,服务器通过sessionid可以确定该会话对象所对应的客户端。
步骤s20,将位于所述延迟队列队头的会话对象确定为第一目标会话对象;
步骤s30,向所述第一目标会话对象对应的目标客户端发送探测信息,以判断所述目标客户端是否与所述服务器保持会话,其中,在所述服务器向所述目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。
延迟队列中含有多个会话对象,而各个会话对象是按照生成时间在延迟队列中进行排序的,服务器可以依次对延迟队列中对头位置的会话对象进行会话状态的确定。具体的,服务器将延迟队列对头的会话对象确定为第一目标会话对象,从而向第一目标会话对象对应的目标客户端发送探测信息,以判断目标客户端是否与服务器保持会话。探测信息可为探测心跳包,在目标客户端接收到探测心跳包时,若目标客户端与服务器保持会话状态,目标客户端会响应探测心跳包,从而向服务器发送响应信息;若目标客户端与服务器未保持会话状态,则目标客户端并不会响应探测心跳包,也即目标客户端不会向服务器发送响应信息。服务器可以根据是否接收到目标客户端发送的响应信息判断服务器与目标客户端是否保持会话。
需要说明的是,由于服务器仅对延迟队列对头的会话对象进行会话状态的判断。故,服务器在向目标客户端发送探测信息后,更换延迟队列对头的会话对象,也即将第一目标会话对象取出,使得位于延迟队列中排序第二的会话对象成为新的第一目标会话对象。
取出的第一目标会话对象根据服务器与目标客户端的保持会话的判断结果进行相应的处理。预设时长(第二预设时长)内,服务器未接收目标客户端基于探测信息发送的响应信息时,即可判定服务器与目标客户端的未保持会话状态,此时,服务器可断开与目标客户端的通信连接,且删除第一目标会话对象。进一步的,服务器可每间隔第三预设时长向目标客户端发送探测信息,第三预设时长小于第二预设时长,使得服务器在第二预设时长内向目标客户端发送多次探测信息,若服务器接收到目标客户端发送的响应信息,则停止发送探测信息,若服务器多次向目标客户端发送探测信息且均未接收到目标客户端发送的响应信息,则可判定服务器与目标客户端未保持会话状态。
在服务器在第二预设时长内接收到目标客户端基于探测信息发送的响应信息时,即可判定服务器与目标客户端保持会话状态,服务器将第一目标会话对象列入延迟队列的队尾,使得第一目标会话对象重新在延迟队列中进行排序以便服务器对继续目标客户端进行会话是否保持的判断。
此外,客户端与服务器可进行数据交互,也即客户端可主动向服务器发送信息,若服务器接收到客户端发送的信息时,即可确定该客户端与服务器保持会话。此时,服务器在延迟队列中确定发送信息的客户端对应的第二目标会话对象,服务器再将该第二目标会话对象列入延迟队列的队尾。
在本实施例中,延迟队列的内部数据结构是一个最小顶堆,即:队头的第一个会话对象,将是第一个过期的会话对象,也是第一个出队的会话对象。示例性技术中,判断会话是否过期的的技术手段为:从含有n会话对象的集合中找出最先过期的会话对象,其计算复杂度为n,而本实施例采用最小顶堆的数据结构,数据复杂度降低到log(n)。根据最小顶堆的原理,获取对头元素的计算复杂度为1,入队的计算复杂度为log(n)、出队的计算复杂度为log(n)。也即本实施例采用延迟队列的方式判断客户端是否与服务器保持会话的计算复杂度远远小于示例性技术中判断客户端是否与服务器保持会话的计算复杂度。
此外,本实施例中,客户端向服务器发送信息时,服务器仅会记录客户端发送信息的记录,而不会向客户端反馈信息,也即本实施例中客户端采用单侧心跳包的方式与服务器进行通信,使得服务器能够节省向客户端反馈信息的网络开销。进一步的,服务器向客户端发送的探测信息,实则是发送探测心跳包,客户端在接收到探测心跳包时,会向服务器进行反馈,也即服务器是以双侧心跳包的形式对客户端与服务器是否保持会话进行判断,使得服务器能够准确的确定客户端是否与服务器保持会话。同时,服务器具有发送探测信息的重发机制,也即服务器在预设时长内未接收到客户端基于探测信息的反馈后,会再次向客户端发送探测信息,避免服务器误判客户端未与服务器保持会话,也即服务器的会话判断可靠性较高。
在本实施例提供的技术方案中,服务器与客户端建立通信连接后,生成客户端对应的会话对象,并将会话对象列入延迟队列的队尾,再将位于延迟队列对头的会话对象确定为目标会话对象,从而向目标会话对象对应的目标客户端发送探测信息以判断目标客户端是否与服务器保持会话,且在服务器向目标客户端发送探测信息后,更换所述延迟队列对头的会话对象。由于服务器在向延迟队列对头的目标会话对象发送探测信息,并将延迟队列对头的会话对象进行更换,使得服务器依次对延迟队列中对头的会话对象进行服务器与客户端的会话是否保持的判断,服务器无需同时判断多个客户端是否与服务器保持会话状态,服务器与客户端的会话状态的判断所耗费的cpu较小,也即服务器所耗费的cpu资源以及网络带宽资源较少。
参照图3,图3为本发明基于延迟队列的会话保持方法的第二实施例,基于第一实施例,所述步骤s20之后,还包括:
步骤s40,在所述第一目标会话对象的会话超时时,从所述延迟队列中取出所述第一目标会话对象,并执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤。
在本实施例中,由于客户端可以主动向服务器发送信息,使得服务器确定该客户端与服务器保持会话。对此,服务器可设置客户端对应的超时时长,在该超时时长内,若服务器未接收到第一目标会话对象对应的目标客户端发送的信息时,即可判定第一目标会话对象的会话超时,服务器再向目标客户端发送探测信息,以判断目标客户端是否与服务器保持会话。
服务器可以通过第一目标会话对象在延迟队列的滞留时长判断第一目标会话对象的会话是否超时。滞留时长指的是会话对象在延迟队列的停留的时长,在会话对象列入延迟队列的队尾时,对会话对象在延迟队列中的滞留时长开始计时。可以理解的是,在第一目标会话对象以及第二目标会话对象重新列入延迟队列的队尾时,两者的滞留时长清零,以重新开始两者滞留时长的计时。
在当第一目标会话对象的滞留时长大于第一预设时长时,取出第一目标会话对象,再向第一目标会话对象对应的目标客户端发送探测信息。第一预设时长可为任意合适的数值,例如,第一预设时长可为300s。
需要说明的是,在建立会话对象时,会话对象有三个时间,分别为最后更新时间(lastactivetimestamp)、入队时间(enqueuetimestamp)以及系统时间戳,三个时间是相等的。入队时间即为会话对象列入延迟队列的时间。同时服务器还会设置会话对象的延迟时间sessiontimeout,延迟时间也即为上述的滞留时长。在本实施例提供的技术方案中,服务器在确定第一目标会话对象,且第一目标会话对象的会话超时时,取出第一目标会话对象,以向第一目标会话对象对应的目标客户端发送探测信息,使得服务器无需对主动发送信息至服务器的客户端进行会话保持的判断,减少服务器的判断次数;同时,服务器取出会话超时的第一目标会话对象,便于服务器对延迟队列中更换后的第一目标会话对象进行会话保持的判断。
参照图4,图4为本发明基于延迟队列的会话保持方法的第三实施例,基于第二实施例,所述步骤40之后,还包括:
步骤s50,确定所述第一目标会话对象的最后更新时间与所述第一目标会话对象在所述延迟队列的入队时间是否一致,其中,所述服务器每接收到所述目标客户端发送信息时,将所述最后更新时间更新为所述服务器接收所述信息的系统时间戳;
步骤s60,在所述最后更新时间与所述入队时间一致时,执行所述向所述第一目标会话对象对应的目标客户端发送探测信息的步骤;
步骤s70,在所述最后更新时间与所述入队时间不一致时,根据所述最后更新时间与所述入队时间之间的差值更新所述第一目标会话对象在所述延迟队列中的滞留时长,并将所述入队时间更新为所述最后更新时间;
步骤s80,按照更新后的入队时间以及滞留时长,将所述第一目标会话对象重新列入所述延迟队列中。
在本实施例中,客户端会主动向服务器发送信息。服务器在接收到客户端发送的信息时,即可确定该客户端与服务器保持会话,此时,服务器将客户端对应的会话对象所对应的最后更新时间更新为客户端向服务器发送信息的时间。故,延迟队列中对头的第一目标会话对象超时,也即第一目标会话对象在延迟对应的滞留时长达到第一预设时长时,服务器取出第一目标会话对象,在判断第一目标会话对象的最后更新时间是否与入队时间一致。
若第一目标会话对象的最后更新时间与入队时间不一致,则表明第一目标会话对象的目标客户端主动向服务器发送了信息,服务器无需向目标客户端发送探测信息以进行目标客户端是否与服务器保持会话,此时,服务器先计算入队时间与最后更新时间的差值,从而根据差值更新第一目标会话对象在延迟队列中的滞留时长,再将第一目标会话对象的入队时间更新为最后更新时间,最后根据更新的入队时间以及滞留时长将第一目标会话对象重新列入延迟队列中。为了便于理解,对此进行举例说明。假设第一目标会话对象的入队时间为9:00am,最后更新时间为9:00am,预设时长为5min,而第一目标会话对象的目标客户端在9:03am时向服务器主动发送信息,最后更新时间由9:00am更新为9:03am;在当前时间达到9:05am时,服务器计算入队时间与最后更新时间之间的差值绝对值为3min,再通过预设时长5min减去3min得到2min,则将第一目标会话对象的滞留时长(延迟时间)更新为2min,同时将入队时间更新为9:03am,服务器在将更新了入队时间以及滞留时长的第一目标会话对象列入延迟队列中。需要说明的是,由于延迟队列中各个会话对象是按照时间顺序进行排队的,而第一目标会话对象的入队时间更新为目标客户端主动向服务器发送信息的时间,因此,第一目标会话对象实际上在延迟队列中进行了一次插队。
若是最后更新时间与入队时间一致,表明第一目标会话对象并未主动向服务器发送信息,此时,服务器需要向目标客户端发送探测信息。
在本实施例提供的技术方案中,第一目标会话对象超时时,服务器对第一目标会话对象进行第二次判断,也即判断第一目标会话对象是否主动向服务器发送信息,信息包括正常的业务消息以及心跳消息,若目标客户端主动向服务器发送信息,服务器则无需对目标客户端发送探测信息;若目标客户端未主动向服务器发送信息,则需要向目标客户端发送探测信息,避免服务器向已经主动发送的信息的客户端发送探测信息,减少服务器的网络开销。
在一实施例中,服务器可以通过线程对客户端与服务器之间的会话保持判断。具体的,服务器可设置第一线程以及第二线程,第一线程用于确定延迟队列中的第一目标会话对象,且监控第一目标会话对象在延迟队列中的滞留时长。在当第一目标会话对象的滞留时长大于第一预设时长时,第一线程将第一目标会话对象取出,由第二线程向第一目标会话对象的目标客户端发送探测信息,且第一线程重新在延迟队列中确定第一目标会话对象,并监控重新确定的第一目标会话对象在延迟队列的滞留时长。可以理解的是,服务器通过两个线程即可完成服务器与多个客户端的会话保持的判断,大大节省了服务器的cpu资源。
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。
可以理解的是,线程池由多个线程构成,服务器可以通过多个线程同时进行多个任务。在当线程池中含有空闲的线程时,空闲的线程即为服务器并未对该线程配置任务,服务器将空闲的线程确定为第一线程。而在当线程池未含有空闲的线程时,服务器创建辅助线程以作为第一线程,但辅助线程与线程池中原有的线程的数量之和不应超过线程池的最大线程数量。若超过最大线程数量,且线程池未含有空闲的线程时,服务器则等待线程完成任务,以将完成任务的线程作为第一线程,而不创建线程。第二线程可为探测线程池中空闲的线程,或者服务器创建在探测线程池的辅助线程。
本发明还提供一种服务器,所述服务器包括存储器、处理器以及存储在所述存储器并可在所述处理器上运行的基于延迟队列的会话保持程序,所述基于延迟队列的会话保持程序被所述处理器执行时实现如上实施例所述的基于延迟队列的会话保持方法的各个步骤。
本发明还提供一种可读存储介质,所述可读存储介质包括基于延迟队列的会话保持程序,所述基于延迟队列的会话保持程序被处理器执行时实现如上实施例所述的基于延迟队列的会话保持方法的各个步骤。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。