一种处理报文的方法和服务器转让专利

申请号 : CN200910085333.8

文献号 : CN101562567B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王君菠王守唐

申请人 : 杭州华三通信技术有限公司

摘要 :

本发明提供了一种处理报文的方法和服务器,其中,方法包括:认证服务器接收到认证过程中的第一个认证报文时,将该第一个认证报文送入第一队列;接收到认证过程中的其它认证报文时,将接收到的部分或全部其它认证报文送入第二队列;其中,所述第二队列的处理优先级高于所述第一队列的处理优先级。通过本发明能够减少服务器因处理大量超时的报文而引起的资源浪费的状况,提高认证成功率。

权利要求 :

1.一种处理报文的方法,其特征在于,该方法包括:

认证服务器接收到认证过程中的第一个认证报文时,将该第一个认证报文送入第一队列;接收到认证过程中的其它认证报文时,将接收到的部分或全部所述其它认证报文送入第二队列;其中,所述第二队列的处理优先级高于所述第一队列的处理优先级。

2.根据权利要求1所述的方法,其特征在于,所述第二队列的处理优先级高于所述第一队列的处理优先级具体包括:在认证服务器的报文处理时序,如果所述第二队列中存在报文,则处理第二队列中的报文;如果所述第二队列中没有报文,则处理第一队列中的报文。

3.根据权利要求1或2所述的方法,其特征在于,在对所述第一队列中的报文进行处理时,判断所述第一队列中当前缓存的报文总长度是否超过预设的长度阈值,如果否,则从所述第一队列的头部取出报文进行处理;如果是,从所述第一队列的尾部取出报文进行处理。

4.根据权利要求1或2所述的方法,其特征在于,按照先入先出的方法处理第二队列中的报文。

5.根据权利要求1或2所述的方法,其特征在于,该方法还包括:每到达所述第一队列所缓存报文对应的超时周期,从所述第一队列头部取出预设长度的报文进行丢弃。

6.根据权利要求1或2所述的方法,其特征在于,该方法还包括:接收到认证过程中的第一个认证报文时,如果所述第一队列当前缓存的报文已满,则丢弃接收到的所述第一个认证报文。

7.根据权利要求1或2所述的方法,其特征在于,预先针对不同协议类型的认证报文分别设置各协议类型对应的第二队列和第一队列;

所述服务器将接收到的认证报文分别送入该认证报文的协议类型所对应的第二队列或第一队列;各协议类型对应的第二队列的处理优先级相同,各协议类型对应的第一队列的处理优先级相同。

8.一种服务器,其特征在于,该服务器包括:报文接收单元、第一队列、第二队列和报文处理单元;

所述报文接收单元,用于接收到认证过程中的第一个认证报文时,将该第一个认证报文送入所述第一队列;接收到认证过程中的其它认证报文时,将接收到的部分或全部所述其它认证报文送入所述第二队列;

所述报文处理单元,用于按照所述第二队列的处理优先级高于所述第一队列的处理优先级的原则,处理所述第一队列和第二队列中的报文。

9.根据权利要求8所述的服务器,其特征在于,所述报文处理单元在该服务器的报文处理时序,如果所述第二队列中存在报文,则处理第二队列中的报文;如果所述第二队列中没有报文,则处理第一队列中的报文。

10.根据权利要求8或9所述的服务器,其特征在于,该服务器还包括:长度判断单元,用于在报文处理单元对第一队列中的报文进行处理时,判断第一队列中当前缓存的报文总长度是否超过预设的长度阈值,如果否,向所述报文处理单元发送第一处理通知,如果是,向所述报文处理单元发送第二处理通知;

所述报文处理单元接收到第一处理通知后,从所述第一队列头部取出报文进行处理;

接收到第二处理通知后,从所述第一队列尾部取出报文进行处理。

11.根据权利要求8或9所述的服务器,其特征在于,所述报文处理单元按照先入先出的方式处理所述第二队列中的报文。

12.根据权利要求8或9所述的服务器,其特征在于,该服务器还包括:第一丢弃处理单元,用于每到达所述第一队列所缓存报文对应的超时周期,从所述第一队列头部取出预设长度的报文进行丢弃。

13.根据权利要求8或9所述的服务器,其特征在于,该服务器还包括:第二丢弃处理单元,用于在所述第一队列当前缓存的报文已满时,丢弃所述报文接收单元当前接收到的所述认证过程中的第一个认证报文。

14.根据权利要求8或9所述的服务器,其特征在于,所述第一队列包括:多个不同协议类型对应的第一队列,分别用于缓存该服务器接收到的该第一队列所对应协议类型的认证过程中的第一个认证报文;

所述第二队列包括:多个不同协议类型对应的第二队列,分别用于缓存该服务器接收到的该第二队列所对应协议类型的认证过程中的其它认证报文。

说明书 :

一种处理报文的方法和服务器

技术领域

[0001] 本发明涉及网络通信技术领域,特别涉及一种处理报文的方法和服务器。

背景技术

[0002] 随着网络技术的不断发展和普及,服务器的应用更加的广泛,并且网络用户的快速增长对服务器的性能提出了更高的要求。
[0003] 目前,服务器对于客户端发送的报文采用的处理方式为:将接收到的报文送入队列中进行缓存,并采用先入先出(FIFO)方式进行处理。当大量用户并发时,如果服务器的CPU处理速度不够快或者报文堆积的速度过快,都会使得队列中的报文积满后,后续的报文被丢弃,然而此时队列前面的报文可能是客户端已经超时废弃的报文,而后续新接收的报文可能是有效的报文,服务器按照FIFO的顺序对报文逐一进行处理,会对服务器的资源造成浪费,且造成后续的有效报文也没有被及时处理或被丢弃。
[0004] 上述方式在认证服务器中会严重影响认证成功率。如图1所示,假设标识为2的报文为客户端2发送的认证过程中的第一个认证报文,标识为1的报文为客户端1发送的认证过程中除了第一个认证报文之外的其它认证报文。由于认证过程中的认证报文是分阶段发送的,且具有一定的超时时间,如果出现报文并发现象,队列中的报文数量过多,服务器按照FIFO的顺序进行处理,处理完标识为2的报文后,客户端2发送的后续报文可能在接收到时,会因为报文队列已满而被丢弃,造成认证过程失败;或者,待认证服务器处理到标识为1的报文时,该报文已达到超时时间,认证过程失败,认证服务器对该标识为1的报文继续进行处理也没有意义,且认证服务器之前对于客户端1发送的第一个认证报文的处理也被浪费。

发明内容

[0005] 有鉴于此,本发明提供了一种处理报文的方法和服务器,以便于减少服务器因处理大量超时的报文而引起的资源浪费的状况,提高认证成功率。
[0006] 一种处理报文的方法,该方法包括:
[0007] 认证服务器接收到认证过程中的第一个认证报文时,将该第一个认证报文送入第一队列;接收到认证过程中的其它认证报文时,将接收到的部分或全部所述其它认证报文送入第二队列;其中,所述第二队列的处理优先级高于所述第一队列的处理优先级。
[0008] 一种服务器,该服务器包括:报文接收单元、第一队列、第二队列和报文处理单元;
[0009] 所述报文接收单元,用于接收到认证过程中的第一个认证报文时,将该第一个认证报文送入所述第一队列;接收到认证过程中的其它认证报文时,将接收到的部分或全部所述其它认证报文送入所述第二队列;
[0010] 所述报文处理单元,用于按照所述第二队列的处理优先级高于所述第一队列的处理优先级的原则,处理所述第一队列和第二队列中的报文。
[0011] 由以上技术方案可以看出,本发明针对认证报文提供了一种分不同队列来处理不同认证阶段的报文,通过第一队列缓存认证过程中的第一个认证报文,通过第二队列缓存认证过程中的部分或全部其它报文,且第二队列的处理优先级高于第一队列的处理优先级。尽量使得后续的认证报文能够在超时时间到来之前尽快得到处理,从而提高认证成功率,也使得之前处理的第一个认证报文也没有浪费,避免了因服务器大量处理无效认证报文所造成的资源浪费状况。

附图说明

[0012] 图1为现有技术中报文在队列中的处理示意图;
[0013] 图2中的(a)和(b)分别为本发明实施例提供的对第一队列从头部和尾部处理的示意图;
[0014] 图3为本发明实施例提供的服务器结构图。

具体实施方式

[0015] 为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
[0016] 本发明提供的方法主要包括:认证服务器接收到认证过程中的第一个认证报文时,将该第一个认证报文送入第一队列;接收到认证过程中的其它认证报文时,将接收到的部分或全部其它认证报文送入第二队列;其中,第二队列的处理优先级高于第一队列的处理优先级。
[0017] 下面结合具体实施例对上述方法进行详细描述。本发明实施例中可以在认证服务器中设置第一队列和第二队列,其中,第一队列用于缓存认证过程中的第一个认证报文,第二队列用于缓存认证过程中的其它认证报文。也就是说,认证服务器接收到认证过程中的第一个认证报文时,将该第一个认证报文送入第一队列,接收到认证过程中的其它认证报文时,将该接收到的其它认证报文送入第二队列。
[0018] 需要说明的是,本发明中所涉及的认证过程中的第一个认证报文是认证发起报文,也包括重传的认证发起报文。
[0019] 在进行报文处理时,第二队列的处理优先级高于第一队列的处理优先级,即优先处理认证过程中的后续其它认证报文。具体原因为:由于认证服务器一定是对认证过程中的第一个认证报文进行处理并向客户端进行了报文回复,才会接收到客户端发送的后续其它认证报文,如果服务器此时优先处理其它认证报文,才能够保证认证成功率以及以前处理过的第一个认证报文没有浪费。
[0020] 具体地,在认证服务器到达报文处理时序时,如果第二队列中缓存有认证报文,则处理第二队列中的认证报文;如果第二队列中没有认证报文,则处理第一队列中的认证报文。
[0021] 对于第二队列中的认证报文可以采用FIFO的方式依次进行处理。
[0022] 对于第一队列中的认证报文,可以在报文处理时序到来时,判断第一队列中当前缓存的报文总长度是否超过预设的长度阈值,如果否,则从第一队列头部取出报文进行处理;如果是,从第一队列尾部取出报文进行处理。
[0023] 其中,预设的长度阈值可以根据CPU的处理能力,以及队列长度等确定。例如,如果第一队列中报文不超过队列长度的80%,则认证服务器从队列头部开始处理报文,如图2中的(a)所示。如果第一队列中报文超过队列长度的80%,则说明队列中缓存的报文过多,为了防止客户端等待的时间超过超时周期,队列头部的报文很有可能已经是无效的报文,认证服务器从队列尾部开始处理报文,如图2中的(b)所示。
[0024] 另外,有可能用户的并发是一个突发过程而不是一个持续的过程,这样当突发大量认证报文时,队列头部的报文可能尚未超时,因此,在报文处理时序到来时都会执行判断第一队列中当前缓存的报文长度是否超过预设的长度阈值的操作,这样队列长度一旦低于长度阈值,则又可以从对头进行报文处理。
[0025] 当第一队列中缓存的报文已满时,对后续接收到的报文都进行尾部丢弃处理,即当认证服务器接收到除了认证过程中的第一个认证报文之外的其它认证报文时,如果第一队列已满,则丢弃接收到的该认证报文。
[0026] 更优地,对于第一队列,每到达该第一队列所缓存报文对应的超时周期,可以从第一队列的头部取出预设长度的报文进行丢弃。该预设长度可以根据经验值进行确定。每到达超时周期,队列前面的报文超时的可能性非常大,为了保证更多的用户认证成功,可以将队列前面的一部分报文丢弃,保证接下来的报文能够尽快得到处理。例如,每到达一个超时周期,就可以将第一队列头部的10%的报文进行丢弃。
[0027] 当认证服务器可能接收到多种协议类型的认证报文时,可以预先针对不同协议类型的认证报文分别设置各协议类型对应的第二队列和第一队列。当认证服务器接收到认证报文后,将该认证报文送入该认证报文的协议类型所对应的第二队列或第一队列。各协议类型对应的第二队列的处理优先级相同,各协议类型对应的第一队列的处理优先级相同。第二队列的处理优先级大于第一队列的处理优先级。
[0028] 假设认证服务器可能接收到两种协议类型的认证报文,那么分别将接收到协议1的认证过程的第一个认证报文都送入协议1对应的第二队列,将协议1的其它认证报文都送入协议1对应的第一队列。将接收到协议2的认证过程的第一个认证报文都送入协议2对应的第二队列,将协议2的其它认证报文都送入协议2对应的第一队列。认证服务器对各队列进行轮询,如果协议1和协议2的第二队列中缓存有报文,则首先处理第二队列中的报文,可以在轮询过程中每个第二队列处理20%。当第二队列中没有报文时,处理轮询处理协议1和协议2的第一队列中的报文,同样,可以每个第一队列处理20%。
[0029] 上述对于第一队列的优化处理方式并不是保障所有用户都认证成功,而在大量认证报文并发或突发的情况下,尽可能保证多的用户认证成功,通常保证持续的用户认证成功,且认证成功的几率也接近恒定,这可能会暂时牺牲一部分用户的认证成功,但该用户的后续重认证的成功率也会相应地提高,从而表现出服务器在大量用户并发情况下的稳定性和可靠性。
[0030] 另外,需要说明的是,上述实施例是以两个队列为例进行的描述,但并不限于仅分为两个队列,本发明还可以分为两个以上的队列。例如分为三个队列,第一队列仍用于缓存认证过程中的第一个认证报文,第二队列缓存认证过程中其它报文中的一部分,另外一部分通过第三队列进行缓存。其中,对于第一队列中报文的处理过程仍可以按照上述实施例中的方式进行。
[0031] 以上是对本发明所提供的方法进行的详细描述,下面对本发明所提供的服务器进行详细描述,图3为本发明实施例提供的服务器结构图,如图3所示,该服务器可以包括:报文接收单元301、第一队列302、第二队列303和报文处理单元304。
[0032] 报文接收单元301,用于接收到认证过程中的第一个认证报文时,将该第一个认证报文送入第一队列302;接收到认证过程中的其它认证报文时,将接收到的部分或全部其它认证报文送入第二队列303。
[0033] 报文处理单元304,用于按照第二队列303的处理优先级高于第一队列302的处理优先级的原则,处理第一队列302和第二队列303中的报文。
[0034] 具体地,报文处理单元304可以在该服务器的报文处理时序,如果第二队列303中存在报文,则处理第二队列303中的报文;如果第二队列303中没有报文,则处理第一队列302中的报文。
[0035] 更优地,该服务器还可以包括:长度判断单元305,用于在报文处理单元304对第一队列302中的报文进行处理时,判断第一队列302中当前缓存的报文总长度是否超过预设的长度阈值,如果否,向报文处理单元304发送第一处理通知,如果是,向报文处理单元304发送第二处理通知。
[0036] 相应地,报文处理单元304接收到第一处理通知后,从第一队列302头部取出报文进行处理;接收到第二处理通知后,从第一队列302尾部取出报文进行处理。
[0037] 另外,报文处理单元304可以按照先入先出的方式处理第二队列303中的报文。
[0038] 另外,为了进一步节约服务器资源,长时间堆积在第一队列头部的报文其失效的可能性较大,此时,该服务器还可以包括:第一丢弃处理单元306,用于每到达第一队列302所缓存报文对应的超时周期,从第一队列302头部取出预设长度的报文进行丢弃。
[0039] 另外,该服务器还可以包括:第二丢弃处理单元307,用于在第一队列302当前缓存的报文已满时,丢弃报文接收单元301接收到的认证过程中的第一个认证报文。
[0040] 如果认证服务器需要处理多种不同协议类型的认证报文,则第一队列302可以包括:多个不同协议类型对应的第一队列(图中未示出),分别用于缓存该服务器接收到的该第一队列所对应协议类型的认证过程中的第一个认证报文。
[0041] 第二队列303可以包括:多个不同协议类型对应的第二队列(图中未示出),分别用于缓存该服务器接收到的该第二队列所对应协议类型的认证过程中的其它认证报文。
[0042] 由以上描述可以看出,本发明所提供的方法和服务器具有以下优点:
[0043] 1)本发明针对认证报文提供了一种分不同队列来处理不同认证阶段的报文,通过第一队列缓存认证过程中的第一个认证报文,通过第二队列缓存认证过程中的部分或全部其它报文,且第二队列的处理优先级高于第一队列的处理优先级。尽量使得后续的认证报文能够在超时时间到来之前尽快得到处理,从而保证认证成功率,也使得之前处理的第一个认证报文也没有浪费,避免了因服务器大量处理无效认证报文所造成的资源浪费状况。
[0044] 2)服务器在对第一队列中的认证报文进行处理时,根据队列拥塞程度的不同,采用不同的报文处理方式,即第一队列中当前缓存的报文总长度超过预设的长度阈值时,从第一队列尾部取出报文进行处理;否则从第一队列头部取出报文进行处理。使得在大量用户并发时,能够尽量保证有效的,即没有超过超时时间的报文,能够得到处理,这种方式还能够避免服务器长期处于处理无效报文的状况,减少服务器资源浪费的状况。
[0045] 3)本发明实施例中,针对第一队列中的报文,每达到第一队列所缓存报文对应的超时周期,可以从第一队列的头部取出预设长度的报文进行丢弃。这种方式通过将第一队列前面超时可能性较大的报文进行丢弃,来保证接下来的有效报文能够尽快得到处理,从而进一步提高处理成功率和减少服务器资源浪费的状况。
[0046] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。