CN103078811B - 一种基于多线程环境网络数据包乱序控制方法 - Google Patents

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

Info

Publication number
CN103078811B
CN103078811B CN201310037379.9A CN201310037379A CN103078811B CN 103078811 B CN103078811 B CN 103078811B CN 201310037379 A CN201310037379 A CN 201310037379A CN 103078811 B CN103078811 B CN 103078811B
Authority
CN
China
Prior art keywords
packet
queue
client
record
source
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.)
Active
Application number
CN201310037379.9A
Other languages
English (en)
Other versions
CN103078811A (zh
Inventor
徐志刚
张立
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Jinher Software Co Ltd
Original Assignee
Beijing Jinher Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Beijing Jinher Software Co Ltd filed Critical Beijing Jinher Software Co Ltd
Priority to CN201310037379.9A priority Critical patent/CN103078811B/zh
Publication of CN103078811A publication Critical patent/CN103078811A/zh
Application granted granted Critical
Publication of CN103078811B publication Critical patent/CN103078811B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

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

Description

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

Claims (5)

1.一种基于多线程环境网络数据包乱序控制方法,其特征在于,包括以下步骤:
步骤一、一个线程不断接收多个客户端向服务端发送的多个数据包并放到源队列中缓存;
步骤二、另一个线程循环的遍历源队列,每遍历一条记录就判断这条记录是否在目标队列中,若不在目标队列中,就将这条记录取出放到目标队列尾部,并记下此客户端的ID,接着遍历下一条记录,若在目标队列中,判断这条记录之前是否存在同一客户端的数据包在等待处理,若不存在,记下这个位置,接着遍历下一条记录,若存在,跳到等待处理的数据包的位置,取出这个数据包放到目标队列尾部,接着遍历下一条记录;
步骤三、其他线程不断从目标队列取走排在头部的客户端的数据包进行处理。
2.如权利要求1所述的基于多线程环境网络数据包乱序控制方法,其特征在于,一个客户端一次向服务端发送一个数据包,所述数据包按服务端接收的先后顺序保存到源队列中。
3.如权利要求2所述的基于多线程环境网络数据包乱序控制方法,其特征在于,所述目标队列中只能保存一个客户端的一个数据包。
4.如权利要求3所述的基于多线程环境网络数据包乱序控制方法,其特征在于,当发现目标队列中有客户端的数据包被处理完成,马上从源队列中取出这个客户端等待处理的数据包填充到目标队列尾部。
5.如权利要求4所述的基于多线程环境网络数据包乱序控制方法,其特征在于,所述步骤二源队列中已经放到目标队列的记录删除后,继续从源队列头部开始遍历源队列。
CN201310037379.9A 2013-01-31 2013-01-31 一种基于多线程环境网络数据包乱序控制方法 Active CN103078811B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310037379.9A CN103078811B (zh) 2013-01-31 2013-01-31 一种基于多线程环境网络数据包乱序控制方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310037379.9A CN103078811B (zh) 2013-01-31 2013-01-31 一种基于多线程环境网络数据包乱序控制方法

Publications (2)

Publication Number Publication Date
CN103078811A CN103078811A (zh) 2013-05-01
CN103078811B true CN103078811B (zh) 2015-12-09

Family

ID=48155220

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310037379.9A Active CN103078811B (zh) 2013-01-31 2013-01-31 一种基于多线程环境网络数据包乱序控制方法

Country Status (1)

Country Link
CN (1) CN103078811B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103347075B (zh) * 2013-07-02 2016-06-08 北京金和软件股份有限公司 一种数据多级缓存处理方法
CN113163346B (zh) * 2021-04-21 2022-04-05 成都锐成芯微科技股份有限公司 广播数据包过滤方法和无线通信系统
CN113220335B (zh) * 2021-05-26 2023-03-14 西安热工研究院有限公司 一种避免多线程并发写快照数据乱序的方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6977934B1 (en) * 1998-10-30 2005-12-20 British Telecommunications Data transport
CN101175033A (zh) * 2007-11-27 2008-05-07 中兴通讯股份有限公司 报文保序方法及其装置
CN101330472A (zh) * 2008-07-28 2008-12-24 中兴通讯股份有限公司 流媒体数据的缓存处理方法
CN101854302A (zh) * 2010-05-27 2010-10-06 中兴通讯股份有限公司 报文保序方法及系统
CN102137027A (zh) * 2011-05-03 2011-07-27 厦门市美亚柏科信息股份有限公司 数据的可靠传输方法和装置
CN102202410A (zh) * 2010-03-23 2011-09-28 中兴通讯股份有限公司 无线通信网络的多用户多业务的调度方法及装置
CN102833336A (zh) * 2012-08-31 2012-12-19 河海大学 分散分布式信息采集与并发处理系统中数据分包处理方法

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020124104A1 (en) * 2001-03-01 2002-09-05 Yigal Rappaport Network element and a method for preventing a disorder of a sequence of data packets traversing the network
GB0524021D0 (en) * 2005-11-25 2006-01-04 Ibm A system for preserving message order
CN100531142C (zh) * 2006-12-30 2009-08-19 华为技术有限公司 保证报文顺序的方法和装置
CN102868636A (zh) * 2012-09-11 2013-01-09 汉柏科技有限公司 多核网络设备报文按流保序方法及系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6977934B1 (en) * 1998-10-30 2005-12-20 British Telecommunications Data transport
CN101175033A (zh) * 2007-11-27 2008-05-07 中兴通讯股份有限公司 报文保序方法及其装置
CN101330472A (zh) * 2008-07-28 2008-12-24 中兴通讯股份有限公司 流媒体数据的缓存处理方法
CN102202410A (zh) * 2010-03-23 2011-09-28 中兴通讯股份有限公司 无线通信网络的多用户多业务的调度方法及装置
CN101854302A (zh) * 2010-05-27 2010-10-06 中兴通讯股份有限公司 报文保序方法及系统
CN102137027A (zh) * 2011-05-03 2011-07-27 厦门市美亚柏科信息股份有限公司 数据的可靠传输方法和装置
CN102833336A (zh) * 2012-08-31 2012-12-19 河海大学 分散分布式信息采集与并发处理系统中数据分包处理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
高性能服务器底层网络通信模块的设计方法;王文武等;《计算机工程》;20090205;第35卷(第3期);全文 *

Also Published As

Publication number Publication date
CN103078811A (zh) 2013-05-01

Similar Documents

Publication Publication Date Title
US9658801B2 (en) System having in-memory buffer service, temporary events file storage system and backup events file uploader service
CN104408088B (zh) 并发请求的控制方法及装置
US9699276B2 (en) Data distribution method and system and data receiving apparatus
US10127955B2 (en) Memory activation method and apparatus, and memory controller
CN105490985B (zh) 一种基于信令传输的tcp长连接的实现方法及装置
CN103078811B (zh) 一种基于多线程环境网络数据包乱序控制方法
TW200617680A (en) Establishing command order in an out of order DMA command queue
US9886310B2 (en) Dynamic resource allocation in MapReduce
US9727364B2 (en) Virtual device hypervisor memory limited receive queuing
CN103502943A (zh) 一种基于消息队列的分布式任务处理的方法、装置及系统
CN104394096A (zh) 一种基于多核处理器的报文处理方法及多核处理器
CN103150149A (zh) 处理数据库重做数据的方法和装置
CN107743137A (zh) 一种文件上传方法及装置
CN105550246A (zh) Android平台下加载网络图片的系统及方法
US9122779B2 (en) Bridge device with an error tolerant DMA transfer function
US9582340B2 (en) File lock
US9052796B2 (en) Asynchronous handling of an input stream dedicated to multiple targets
CN105653610A (zh) 一种快速显示大容量数据信息的方法
CN105579963B (zh) 任务处理装置、电子设备及方法
CN103067419B (zh) 一种分布式文件系统及在该系统中控制文件存储的方法
US9501414B2 (en) Storage control device and storage control method for cache processing according to time zones
CN105306858B (zh) 一种视频数据存储方法和装置
CN104008067A (zh) 一种存储数据的方法及装置
US20150317193A1 (en) Distributed processing apparatus, distributed processing system, and storage medium
CN105630593A (zh) 用于处理中断的方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant