CN102833336A - 分散分布式信息采集与并发处理***中数据分包处理方法 - Google Patents
分散分布式信息采集与并发处理***中数据分包处理方法 Download PDFInfo
- Publication number
- CN102833336A CN102833336A CN2012103157176A CN201210315717A CN102833336A CN 102833336 A CN102833336 A CN 102833336A CN 2012103157176 A CN2012103157176 A CN 2012103157176A CN 201210315717 A CN201210315717 A CN 201210315717A CN 102833336 A CN102833336 A CN 102833336A
- Authority
- CN
- China
- Prior art keywords
- data
- thread
- packet
- data processing
- divided
- 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
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种分散分布式信息采集与并发处理***中数据分包处理方法。客户端在将原始任务分解为多个分数据包时,为每个分数据包添加一个包含任务唯一性标志和分包信息的数据包标识,然后将带有数据包标识的分数据包发送至服务端;服务端在进程启动时,开启一个数据接收线程,并创建包含至少一个数据处理线程的线程池,以及一个数据分发线程,同时开辟一段动态存储区BM,并为线程池中的每一个数据处理线程开辟一个动态存储区SM;数据分发线程根据数据包标识及各数据处理线程的状态为分数据包分配相应的数据处理线程,同一原始任务的分数据包分配至同一数据处理线程。本发明可显著提高海量数据并发性处理***的数据处理性能、正确率以及稳定性。
Description
技术领域
本发明涉及一种数据处理方法,尤其涉及一种分散分布式信息采集与并发处理***中数据分包处理方法,属于计算机网络技术领域。
背景技术
在基于TCP/IP的通信***开发中,都要涉及到基于SOCKET技术进行程序的开发,基于SOCKET技术开发,涉及客户端发送数据与服务端接收数据,而基于SOCKET技术服务端的实现流程如下:
1. 加载套接字
2. 创建监听的套接字
3. 绑定套接字
4. 监听套接字
5. 收到客户端数据,处理客户端相关请求
在第5点,服务端接收到客户端数据,一般产生一个线程,把接收到的数据传给这个新线程进行处理。
分散分布式信息采集与并发处理***是指在一个大型分布式***中涉及海量的***终端以及少量中心处理平台,海量数据终端分布在不同区域或同一区域,且在同一时间并行向中心处理平台发送、请求数据或中心处理平台向各个***终端请求数据,中心处理平台同时向各个***终端并行采集数据或并行处理大量***终端的数据请求,其特点是同一时间,中心处理平台并行处理大量来自于***终端的海量数据,最典型的应用是各种web服务器、电信后台计费***的编解码处理等等。在分散分布式信息采集与并发处理***中,客户端一个完整的请求分包发送到服务端是不可避免的且大量存在的事情,大量终端随机分包请求的,服务端接收到随机请求数据后,很难区分接收到的包究竟如何进行组包处理,这样的经常出现两个结果:
一、 限制同一时间分包发送的客户端数量,不允许多个客户端同时出现分包发送数据的情况;
二、多个客户端同时分包发送,服务端进程返回错误结果;
这样就严重影响了***处理数据的正确率、稳定性,影响***使用。
发明内容
本发明所要解决的技术问题在于克服现有技术不足,提供一种分散分布式信息采集与并发处理***中数据分包处理方法,通过对随机接收的数据进行判断,在数据分发线程中通过合理判断与处理,对每个数据处理线程进行正确、有效数据分配,能够解决任意终端随机分包发送数据到服务端的数据处理情况,提高服务端数据处理效率、正确率,提高***数据处理性能。
本发明具体采用以下技术方案解决上述技术问题。
一种分散分布式信息采集与并发处理***中数据分包处理方法,客户端将原始任务分解为多个分数据包,发送至服务端;服务端接收到所述多个分数据包后,将其合并为原始任务后进行处理;
客户端在将原始任务分解为多个分数据包时,为每个分数据包添加一个包含任务唯一性标志和分包信息的数据包标识,然后将带有数据包标识的分数据包发送至服务端;
服务端在进程启动时,开启一个数据接收线程,并创建包含至少一个数据处理线程的线程池,以及一个数据分发线程,同时开辟一段动态存储区BM,并为线程池中的每一个数据处理线程开辟一个动态存储区SM;
数据接收线程接收分数据包并将其存入动态存储区BM;数据分发线程循环读取动态存储区BM中的分数据包,根据数据包标识及各数据处理线程的状态将分数据包存入相应的动态存储区SM,属于同一原始任务的分数据包存入同一动态存储区SM,并在某一原始任务的所有分数据包均存入同一动态存储区SM时,触发该动态存储区SM所对应的数据处理线程合并处理该动态存储区SM所存储的分包数据。
优选地,所述为分数据包添加的数据包标识为包含任务唯一性标志、总包数以及包序列号的信息头,其中,总包数是指该分数据包所属的原始任务所分解的所有分数据包的总个数,包序列号是指该分数据包在所属的原始任务所分解的分数据包中的序号。
进一步地,服务端在创建包含至少一个数据处理线程的线程池后,为线程池中的每一个数据处理线程设置一个线程状态标志和一个数据标志;所述数据分发线程循环读取动态存储区BM中的分数据包,并根据分数据包的信息头进行相应处理,具体如下:
如果信息头中的总包数大于1、包序列号等于1,则从所述线程池中选择一个线程状态标志为“空闲”的数据处理线程,把分数据包放入该数据处理线程的动态存储区SM,同时将该数据处理线程的数据标志设置为所述信息头中的任务唯一性标志,将该数据处理线程的线程状态标志设置为“分包”状态;
如果信息头中的总包数大于1、包序列号大于1且小于包总数,则在线程池中线程状态标志为“分包”状态的数据处理线程中,检测出数据标志与所述信息头中的任务唯一性标志相同的数据处理线程,并把分数据包放入该数据处理线程的动态存储区SM;
如果信息头中的数据包总数大于1、总包数与包序列号相等,则在线程池中线程状态标志为“分包”状态的数据处理线程中,检测出数据标志与所述信息头中的任务唯一性标志相同的数据处理线程,并把分数据包放入该数据处理线程的动态存储区SM,同时触发该数据处理线程合并处理该动态存储区SM所存储的分包数据,并重置该数据处理线程的线程状态标志为“空闲”。
根据本发明方法,还可得到一种使用上述任一技术方案的分散分布式信息采集与并发处理***。
本发明方法通过对随机接收的数据进行判断,在数据分发线程中通过合理判断与处理,对每个数据处理线程进行正确、有效数据分配,能够解决任意终端随机分包发送数据到服务端的数据处理情况,提高服务端数据处理效率、正确率,提高***数据处理性能。
附图说明
图1为本发明方法的原理示意图;
图2为本发明方法的分包数据处理流程示意图。
具体实施方式
下面结合附图对本发明的技术方案进行详细说明:
本发明方法中,客户端在将原始任务分解为多个分数据包时,为每个分数据包添加一个包含任务唯一性标志和分包信息的数据包标识,然后将带有数据包标识的分数据包发送至服务端;服务端在进程启动时,如图1所示,开启一个数据接收线程,并创建包含至少一个数据处理线程的线程池,以及一个数据分发线程,同时开辟一段动态存储区BM,并为线程池中的每一个数据处理线程开辟一个动态存储区SM;数据接收线程接收分数据包并将其存入动态存储区BM;数据分发线程循环读取动态存储区BM中的分数据包,根据数据包标识及各数据处理线程的状态将分数据包存入相应的动态存储区SM,属于同一原始任务的分数据包存入同一动态存储区SM,并在某一原始任务的所有分数据包均存入同一动态存储区SM时,触发该动态存储区SM所对应的数据处理线程合并处理该动态存储区SM所存储的分包数据。
为了便于公众了解本发明的技术方案,下面以一个具体实施例来对本发明的分包处理方法进行详细说明,其处理流程如图2所示,包括以下步骤:
步骤1、服务端进程启动时,开启一个数据接收线程R,开启一个数据分配线程S以及开启一个包含多个数据处理线程D的数据处理线程池,同时在程序中开辟一段用于存储接收到的客户端数据的动态存储区BM,并按照FIFO方式管理动态存储区BM;服务端为线程池中的每一个数据处理线程设置一个线程状态标志TS和一个数据标志DS,以及一小段动态存储区SM。
步骤2、客户端将原始任务分解为多个分数据包,为每个分数据包添加一个包含任务唯一性标志和分包信息的数据包标识,然后将带有数据包标识的分数据包依次发送至服务端;本具体实施方式中,所述任务唯一性标志由客户端标志+任务序号构成,每一个任务唯一性标志标识一个原始任务;所述分包信息包括总包数和包序列号,其中,总包数是指该分数据包所属的原始任务所分解的所有分数据包的总个数,包序列号是指该分数据包在所属的原始任务所分解的分数据包中的序号;任务唯一性标志、总包数和包序列号共同共同构成了分数据包的唯一性标识。
步骤3、服务端的数据接收线程R通过socket侦听并接收客户端传过来的数据,直接把数据放入数据存储区BM,立即返回继续侦听接收客户端数据。
步骤4、数据分发线程循环读取动态存储区BM,获取分数据包D,解析出所读取分数据包的信息头,根据信息头及各数据处理线程的状态将分数据包分配至相应的数据处理线程,具体如下:
如果信息头中的总包数大于1,且包序列号等于1,则轮询检测线程池中每个线程的数据处理线程的线程状态标志TS,如果线程状态标志TS是“空闲”,则把分数据包放入该数据处理线程的动态存储区SM,同时设置该数据处理线程的数据标志DS为分数据包的信息头中的任务唯一性标志,并设置该线程的线程状态标志TS为“分包”状态;
如果信息头中的数据包总数大于1、包序列号大于1且小于包总数,则轮询检测线程池中每个数据处理线程的状态标志TS,如果线程状态标志TS为“分包”状态,则继续检测该线程的数据标志DS是否与分数据包的信息头中的任务唯一性标志相匹配(即是否相同),如匹配,则把分数据包放入该数据处理线程的动态存储区SM;
如果数据包总数大于1、总包数与序列号相等,则轮询检测线程池中每个数据处理线程的状态标志TS,如果线程状态标志TS为“分包”状态,则继续检测该线程的数据标志DS是否与分数据包的信息头中的任务唯一性标志相匹配;匹配,则把分数据包放入该数据处理线程的动态存储区SM,同时触发该数据处理线程开始处理已经接收到的分包数据,对数据合并处理,并重置线程状态标志TS为“空闲”状态。
通过上述方法,服务端对来自大量客户端的分数据包进行多线程并行处理,来自同一原始任务的分数据包会被依次分配至同一个数据处理线程的动态存储区SM,并在所有分数据包到达后,立即对其进行合并、处理;完成处理后的数据处理线程重新开始新的任务的处理,从而有效提高了***处理数据的正确率、稳定性。
Claims (4)
1.一种分散分布式信息采集与并发处理***中数据分包处理方法,客户端将原始任务分解为多个分数据包,发送至服务端;服务端接收到所述多个分数据包后,将其合并为原始任务后进行处理;其特征在于,
客户端在将原始任务分解为多个分数据包时,为每个分数据包添加一个包含任务唯一性标志和分包信息的数据包标识,然后将带有数据包标识的分数据包发送至服务端;
服务端在进程启动时,开启一个数据接收线程,并创建包含至少一个数据处理线程的线程池,以及一个数据分发线程,同时开辟一段动态存储区BM,并为线程池中的每一个数据处理线程开辟一个动态存储区SM;
数据接收线程接收分数据包并将其存入动态存储区BM;数据分发线程循环读取动态存储区BM中的分数据包,根据数据包标识及各数据处理线程的状态将分数据包存入相应的动态存储区SM,属于同一原始任务的分数据包存入同一动态存储区SM,并在某一原始任务的所有分数据包均存入同一动态存储区SM时,触发该动态存储区SM所对应的数据处理线程合并处理该动态存储区SM所存储的分包数据。
2.如权利要求1所述分散分布式信息采集与并发处理***中数据分包处理方法,其特征在于,所述为分数据包添加的数据包标识为包含任务唯一性标志、总包数以及包序列号的信息头,其中,总包数是指该分数据包所属的原始任务所分解的所有分数据包的总个数,包序列号是指该分数据包在所属的原始任务所分解的分数据包中的序号。
3.如权利要求2所述散分布式信息采集与并发处理***中数据分包处理方法,其特征在于,服务端在创建包含至少一个数据处理线程的线程池后,为线程池中的每一个数据处理线程设置一个线程状态标志和一个数据标志;所述数据分发线程循环读取动态存储区BM中的分数据包,并根据分数据包的信息头进行相应处理,具体如下:
如果信息头中的总包数大于1、包序列号等于1,则从所述线程池中选择一个线程状态标志为“空闲”的数据处理线程,把分数据包放入该数据处理线程的动态存储区SM,同时将该数据处理线程的数据标志设置为所述信息头中的任务唯一性标志,将该数据处理线程的线程状态标志设置为“分包”状态;
如果信息头中的总包数大于1、包序列号大于1且小于包总数,则在线程池中线程状态标志为“分包”状态的数据处理线程中,检测出数据标志与所述信息头中的任务唯一性标志相同的数据处理线程,并把分数据包放入该数据处理线程的动态存储区SM;
如果信息头中的数据包总数大于1、总包数与包序列号相等,则在线程池中线程状态标志为“分包”状态的数据处理线程中,检测出数据标志与所述信息头中的任务唯一性标志相同的数据处理线程,并把分数据包放入该数据处理线程的动态存储区SM,同时触发该数据处理线程合并处理该动态存储区SM所存储的分包数据,并重置该数据处理线程的线程状态标志为“空闲”。
4.一种使用如权利要求1-3任一项所述分包数据处理方法的分散分布式信息采集与并发处理***。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103157176A CN102833336A (zh) | 2012-08-31 | 2012-08-31 | 分散分布式信息采集与并发处理***中数据分包处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2012103157176A CN102833336A (zh) | 2012-08-31 | 2012-08-31 | 分散分布式信息采集与并发处理***中数据分包处理方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102833336A true CN102833336A (zh) | 2012-12-19 |
Family
ID=47336303
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103157176A Pending CN102833336A (zh) | 2012-08-31 | 2012-08-31 | 分散分布式信息采集与并发处理***中数据分包处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102833336A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103078811A (zh) * | 2013-01-31 | 2013-05-01 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
CN103457926A (zh) * | 2013-01-17 | 2013-12-18 | 成都阜特科技股份有限公司 | 一种cms前置机与服务器的通讯方法 |
CN103647790A (zh) * | 2013-12-24 | 2014-03-19 | 常州工学院 | 一种超大文件协议分析统计方法 |
CN104142865A (zh) * | 2014-07-18 | 2014-11-12 | 国家电网公司 | 一种基于线程同步的数据收集处理方法 |
CN104572262A (zh) * | 2014-12-27 | 2015-04-29 | 北京奇虎科技有限公司 | 一种任务执行方法和装置 |
CN104834558A (zh) * | 2015-05-19 | 2015-08-12 | 北京京东尚科信息技术有限公司 | 一种数据处理的方法及*** |
CN105260378A (zh) * | 2015-09-08 | 2016-01-20 | 上海上讯信息技术股份有限公司 | 数据库审计的方法和设备 |
CN108737180A (zh) * | 2018-05-22 | 2018-11-02 | 北京汉能光伏投资有限公司 | 数据采集方法、数据发送方法、数据采集设备及网络设备 |
CN110855738A (zh) * | 2019-09-25 | 2020-02-28 | 安徽四创电子股份有限公司 | 一种用于多源设备的通讯处理*** |
CN110943942A (zh) * | 2019-11-13 | 2020-03-31 | 北京连山时代科技有限公司 | 一种基于数据包编号的多路并发传输方法和*** |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1434386A (zh) * | 2003-01-25 | 2003-08-06 | 华中科技大学 | 基于集群视频服务器的节目源分片分布式存储方法 |
CN101119219A (zh) * | 2007-09-12 | 2008-02-06 | 中兴通讯股份有限公司 | 一种广播组播业务中数据传输的实现方法及*** |
EP1236088B1 (en) * | 1999-09-01 | 2008-05-21 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
CN101217467A (zh) * | 2007-12-28 | 2008-07-09 | 杭州华三通信技术有限公司 | 核间负载分发装置及方法 |
CN102624889A (zh) * | 2012-03-06 | 2012-08-01 | 河海大学 | 一种基于接收与处理分离的海量数据并发性处理方法 |
-
2012
- 2012-08-31 CN CN2012103157176A patent/CN102833336A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1236088B1 (en) * | 1999-09-01 | 2008-05-21 | Intel Corporation | Register set used in multithreaded parallel processor architecture |
CN1434386A (zh) * | 2003-01-25 | 2003-08-06 | 华中科技大学 | 基于集群视频服务器的节目源分片分布式存储方法 |
CN101119219A (zh) * | 2007-09-12 | 2008-02-06 | 中兴通讯股份有限公司 | 一种广播组播业务中数据传输的实现方法及*** |
CN101217467A (zh) * | 2007-12-28 | 2008-07-09 | 杭州华三通信技术有限公司 | 核间负载分发装置及方法 |
CN102624889A (zh) * | 2012-03-06 | 2012-08-01 | 河海大学 | 一种基于接收与处理分离的海量数据并发性处理方法 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103457926A (zh) * | 2013-01-17 | 2013-12-18 | 成都阜特科技股份有限公司 | 一种cms前置机与服务器的通讯方法 |
CN103078811B (zh) * | 2013-01-31 | 2015-12-09 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
CN103078811A (zh) * | 2013-01-31 | 2013-05-01 | 北京金和软件股份有限公司 | 一种基于多线程环境网络数据包乱序控制方法 |
CN103647790A (zh) * | 2013-12-24 | 2014-03-19 | 常州工学院 | 一种超大文件协议分析统计方法 |
CN104142865A (zh) * | 2014-07-18 | 2014-11-12 | 国家电网公司 | 一种基于线程同步的数据收集处理方法 |
CN104572262A (zh) * | 2014-12-27 | 2015-04-29 | 北京奇虎科技有限公司 | 一种任务执行方法和装置 |
CN104572262B (zh) * | 2014-12-27 | 2018-09-04 | 北京奇虎科技有限公司 | 一种任务执行方法和装置 |
CN104834558A (zh) * | 2015-05-19 | 2015-08-12 | 北京京东尚科信息技术有限公司 | 一种数据处理的方法及*** |
CN104834558B (zh) * | 2015-05-19 | 2018-06-01 | 北京京东尚科信息技术有限公司 | 一种数据处理的方法及*** |
CN105260378A (zh) * | 2015-09-08 | 2016-01-20 | 上海上讯信息技术股份有限公司 | 数据库审计的方法和设备 |
CN108737180A (zh) * | 2018-05-22 | 2018-11-02 | 北京汉能光伏投资有限公司 | 数据采集方法、数据发送方法、数据采集设备及网络设备 |
WO2019223065A1 (zh) * | 2018-05-22 | 2019-11-28 | 北京汉能光伏投资有限公司 | 数据采集方法、数据发送方法、数据采集设备及网络设备 |
CN110855738A (zh) * | 2019-09-25 | 2020-02-28 | 安徽四创电子股份有限公司 | 一种用于多源设备的通讯处理*** |
CN110855738B (zh) * | 2019-09-25 | 2022-06-07 | 安徽四创电子股份有限公司 | 一种用于多源设备的通讯处理*** |
CN110943942A (zh) * | 2019-11-13 | 2020-03-31 | 北京连山时代科技有限公司 | 一种基于数据包编号的多路并发传输方法和*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102833336A (zh) | 分散分布式信息采集与并发处理***中数据分包处理方法 | |
CN101656677B (zh) | 一种报文分流处理方法及装置 | |
CN202455371U (zh) | 一种多机测试*** | |
CN102638487B (zh) | 大型遥测地震仪高性能数据传输方法 | |
CN101188477B (zh) | 一种数据包序列接收的方法及设备 | |
CN108881008A (zh) | 一种数据传输的方法、装置和*** | |
CN108009028A (zh) | 消息处理方法、装置、设备及计算机可读存储介质 | |
CN101877659B (zh) | 一种丢包监控的方法、设备和*** | |
CN102694855A (zh) | 基于北斗卫星的气象灾害预警信息发布***及方法 | |
CN106155812A (zh) | 一种对虚拟主机的资源管理的方法、装置、***及电子设备 | |
CN105556916B (zh) | 网络流的信息统计方法和装置 | |
CN102377650A (zh) | 数据发送处理方法、装置和*** | |
CN102737065A (zh) | 数据的获取方法和装置 | |
CN105141660A (zh) | 一种流媒体管理方法及*** | |
CN104519129A (zh) | 一种数据传输方法、设备及*** | |
CN102035738A (zh) | 一种获取路由信息的方法及装置 | |
CN104618253B (zh) | 一种动态变更的传输报文处理方法和装置 | |
CN103002049A (zh) | 一种大数据量数据的网络传输*** | |
CN105763297A (zh) | 一种基于云计算***的远程数据优化传输方法和装置 | |
CN101789949A (zh) | 一种实现负荷分担的方法和路由设备 | |
CN104821958B (zh) | 基于WebService的用电数据分组交互接口方法 | |
CN102724164A (zh) | 电力控制***的多通信协议传输装置及方法 | |
CN109286506B (zh) | 一种流量计费的方法、***及装置 | |
CN103441952A (zh) | 基于多核或众核嵌入式处理器的网络数据包处理方法 | |
CN100466622C (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 | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20121219 |