一种基于多线程环境网络数据包乱序控制方法技术

技术编号:8657580 阅读:260 留言:0更新日期:2013-05-02 01:30
本发明专利技术公开了一种基于多线程环境网络数据包乱序控制方法,其特征在于,包括以下步骤:一个线程不断接收多个客户端向服务端发送的数据包放到源队列中缓存;另一个线程循环遍历源队列,每遍历一条记录就判断是否在目标队列中,若不在,就将这条记录取出放到目标队列尾部,并记下此客户端的ID,接着遍历下一条记录,若在,判断这条记录之前是否存在同一客户端的数据包在等待处理,若不存在,记下这个位置,接着遍历下一条记录,若存在,跳到等待处理的数据包位置,取出这个数据包放到目标队列尾部,接着遍历下一条记录;其他线程不断从目标队列取走排在头部的客户端的数据包进行处理。本发明专利技术所述的方法有效控制了多线程化境下的数据包的处理顺序。

【技术实现步骤摘要】

本专利技术涉及计算机服务端多线程环境下的数据处理领域,尤其涉及。
技术介绍
在CS架构的服务端通信中,为了处理多个客户端并发的请求,往往会开启多个线程或者是线程池来处理业务,以提高服务的处理能力,如果一个客户端连续向服务器发送请求包,而且对包的先后顺序有严格的要求,在这种情况下,服务器的多线程处理就有可能打乱此客户端数据包的先后顺序,不能保证客户端的数据包顺序到达服务端,顺序返回客户端。
技术实现思路
针对上述技术问题,本专利技术设计开发了,目的在保证客户端的数据包顺序到达服务端,顺序返回客户端,有效控制多线程化境下的数据包的处理顺序。本专利技术提供的技术方案为:,包括以下步骤:步骤一、一个线程不断接收多个客户端向服务端发送的多个数据包并放到源队列中缓存;步骤二、另一个线程循环的遍历源队列,每遍历一条记录就判断这条记录是否在目标队列中,若不在目标队列中,就将这条记录取出放到目标队列尾部,并记下此客户端的ID,接着遍历下一条记录,若在目标队列中,判断这条记录之前是否存在同一客户端的数据包在等待处理,若不存在,记下这个位置,接着遍历下一条记录,若存在,跳到等待处理的数据包的位置,取出这个数据包放到目标队列尾部,接着遍历下一条记录;步骤三、其他线程不断从目标队列取走排在头部的客户端的数据包进行处理。优选的是,所述的基于多线程环境网络数据包乱序控制方法中,一个客户端一次向服务端发送一个数据包,所述数据包按服务端接收的先后顺序保存到源队列中。优选的是,所述的基于多线程环境网络数据包乱序控制方法中,所述目标队列中只能保存一个客户端的一个数据包。优选的是,所述的基于多线程环境网络数据包乱序控制方法中,当发现目标队列中有客户端的数据包被处理完成,马上从源队列中取出这个客户端等待处理的数据包填充到目标队列尾部。优选的是,所述的基于多线程环境网络数据包乱序控制方法中,所述步骤二源队列中已经放到目标队列的记录删除后,继续从源队列头部开始遍历源队列。本专利技术所述的基于多线程环境网络数据包乱序控制方法具有以下有益效果:服务端最初接收到的数据包保存在源队列中,它本身就是有序的,保证了客户端的数据包顺序到达服务端。由于目标队列保存的是一个客户端的一个数据包,不会有这个客户端的第二个数据包,因此经过遍历后,多个客户端的数据包将从源队列顺序放到目标队列中进行数据处理,保证了处理后的数据顺序返回客户端,有效控制了多线程化境下的数据包的处理顺序。附图说明图1是本专利技术所述的基于多线程环境网络数据包乱序控制方法的流程图;图2是本专利技术的一个实施例的示意图。具体实施例方式下面结合附图对本专利技术做进一步的详细说明,以令本领域技术人员参照说明书文字能够据以实施。如图1所示,本专利技术提供,包括以下步骤:步骤一、一个线程不断接收多个客户端向服务端发送的多个数据包并放到源队列中缓存;步骤二、另一个线程循环的遍历源队列,每遍历一条记录就判断这条记录是否在目标队列中,若不在目标队列中,就将这条记录取出放到目标队列尾部,并记下此客户端的ID,接着遍历下一条记录,若在目标队列中,判断这条记录之前是否存在同一客户端的数据包在等待处理,若不存在,记下这个位置,接着遍历下一条记录,若存在,跳到等待处理的数据包的位置,取出这个数据包放到目标队列尾部,接着遍历下一条记录;步骤三、其他线程不断从目标队列取走排在头部的客户端的数据包进行处理。所述的基于多线程环境网络数据包乱序控制方法中,一个客户端一次向服务端发送一个数据包,所述数据包按服务端接收的先后顺序保存到源队列中。所述的基于多线程环境网络数据包乱序控制方法中,所述目标队列中只能保存一个客户端的一个数据包。所述的基于多线程环境网络数据包乱序控制方法中,当发现目标队列中有客户端的数据包被处理完成,马上从源队列中取出这个客户端等待处理的数据包填充到目标队列尾部。所述的基于多线程环境网络数据包乱序控制方法中,所述步骤二源队列中已经放到目标队列的记录删除后,继续从源队列头部开始遍历源队列。本专利技术的实施例中,客户端以user表示,数据包以packet表示,用数字1、2、3......区分不同的客户端和数据包。多个客户端不断向服务端发送数据包,一个线程将四个客户端发送的八个数据包按接收到的先后顺序保存到源队列中,另一个线程循环遍历源队列,将userl的packetl移到目标队列,并记下此userl正在被处理,当遍历到userl,packet2时,发现源队列有userl的packetl正在处理,而且在它之前没有userl的packet在等待处理,记下userl的packet2的位置N,接着遍历下一条,当遍历到user2, packetl时,发现不在目标队列中,将它移到目标队列中,依次类推,user3, packetl和user4, packet2都被移动目标队列中。删除源队列中已经移到目标队列的数据包,用NULL表示已删除,继续从源队列头部开始遍历此队列,重复前面的操作。若目标队列中的userl,packetl已经被处理掉了,正好源队列遍历到了 userl,packet3位置,发现在它之前有userl,packet2在等待处理,优先处理userl, packet2,将userl, packet2放到目标队列尾部,然后跳回到userl,packet3位置开始重新遍历,最终目标队列中保存的是所有user的单个数据包,其他的包将留在源队列中等待处理。尽管本专利技术的实施方案已公开如上,但其并不仅仅限于说明书和实施方式中所列运用,它完全可以被适用于各种适合本专利技术的领域,对于熟悉本领域的人员而言,可容易地实现另外的修改,因此在不背离权利要求及等同范围所限定的一般概念下,本专利技术并不限于特定的细节和这里示出与描述的图例。本文档来自技高网...

【技术保护点】
一种基于多线程环境网络数据包乱序控制方法,其特征在于,包括以下步骤:步骤一、一个线程不断接收多个客户端向服务端发送的多个数据包并放到源队列中缓存;步骤二、另一个线程循环的遍历源队列,每遍历一条记录就判断这条记录是否在目标队列中,若不在目标队列中,就将这条记录取出放到目标队列尾部,并记下此客户端的ID,接着遍历下一条记录,若在目标队列中,判断这条记录之前是否存在同一客户端的数据包在等待处理,若不存在,记下这个位置,接着遍历下一条记录,若存在,跳到等待处理的数据包的位置,取出这个数据包放到目标队列尾部,接着遍历下一条记录;步骤三、其他线程不断从目标队列取走排在头部的客户端的数据包进行处理。

【技术特征摘要】
1.一种基于多线程环境网络数据包乱序控制方法,其特征在于,包括以下步骤: 步骤一、一个线程不断接收多个客户端向服务端发送的多个数据包并放到源队列中缓存; 步骤二、另一个线程循环的遍历源队列,每遍历一条记录就判断这条记录是否在目标队列中,若不在目标队列中,就将这条记录取出放到目标队列尾部,并记下此客户端的ID,接着遍历下一条记录,若在目标队列中,判断这条记录之前是否存在同一客户端的数据包在等待处理,若不存在,记下这个位置,接着遍历下一条记录,若存在,跳到等待处理的数据包的位置,取出这个数据包放到目标队列尾部,接着遍历下一条记录; 步骤三、其他线程不断从目标队列取走排在头部的客户端的数据包进行处理。...

【专利技术属性】
技术研发人员:徐志刚张立
申请(专利权)人:北京金和软件股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1