一种嵌入式数据传输方法及系统与流程

文档序号:33713893发布日期:2023-04-01 03:00阅读:68来源:国知局
一种嵌入式数据传输方法及系统与流程

1.本公开属于多线程数据传输技术领域,具体涉及一种嵌入式数据传输方法及系统。


背景技术:

2.本部分的陈述仅仅是提供了与本公开相关的背景技术信息,不必然构成在先技术。
3.随着电力互联网和物联网的高速发展,在电力系统中使用的各种智能传感器、电子设备和移动终端的数量急剧增长,其也对电力系统中的嵌入式汇聚点的后台程序提出了更高的性能和并发要求。
4.据发明人了解,目前处理并发网络通常采用以下三种方案:
5.(1)io多路复用模型,通过单进程(非多线程)调用select函数来处理多个连接请求;可支持同时处理多个网络连接请求;但是,最大并发为1024个,当并发数较大时,处理性能低下。
6.(2)多进程模型,当连接请求过来时,主进程fork产生一个子进程,让子进程负责与客户端连接进行数据通信,当客户主动关闭连接后,子进程结束运行;其处理模式简单,易于理解,连接请求很小时,效率较高;但是,当连接请求过多时,系统资源很快被耗尽。
7.(3)多线程模式,启动多个工作现场,主线程负责接收客户端连接请求,工作线程负责与客户端通信,当连接请求过来时,accept线程将socket句柄放入一个数组中,工作线程中的空闲线程从数组中取走一个socket句柄,对应的工作线程再与客户端连接进行数据通信,当客户端主动关闭连接后,此工作线程又去从指定数组中去socket句柄,一次重复运行;虽然是能够克服当连接请求过多时系统资源损耗的缺陷,但是,不能支持并发量大的请求和量稍大的长连接请求。


技术实现要素:

8.为了解决上述问题,本公开提出了一种嵌入式数据传输方法及系统,设计了一种嵌入式高并发、高性能的数据传输框架,应用于服务端,在智能电网中实现海量电力设备、智能传感器、智能终端等端设备的快速适配接入,减少资源浪费,优化电网的数据传输。
9.根据一些实施例,本公开的第一方案提供了一种嵌入式数据传输方法,采用如下技术方案:
10.一种嵌入式数据传输方法,包括:
11.接收线程接收来自客户端的数据信息,将所接收到的客户端数据信息写入接收队列并存储;
12.工作线程接收到接收线程指令后,提取接收线程指令中的参数信息,确定所获取参数信息的接收队列的所属接收线程,完成所属的接收线程与相对应工作线程之间的数据传输;
13.其中,一个所述接收队列对应一个工作线程,一个所述接收线程至少对应两个接收队列。
14.作为进一步的技术限定,在所述接收线程接收来自客户端的数据信息的过程中,当客户端发送连接请求时,所述接收线程调用accept服务来接收来这客户端的连接请求,通过accept服务中的socket-fd分发给一个接收线程,接收到socket-fd的接收线程将fd加入select的fd_set中进行监听,实现接收线程与客户端之间的通信,完成接收线程接收来自客户端的数据信息。
15.作为进一步的技术限定,为减少数据复制,所述接收线程在开始接收数据时需为将要接收的数据从接收队列中分配一块空间;当接收线程接收到一条完整的客户端数据信息后,通过uninx-udp发送消息,告知某一工作线程到指定的接收队列中提取相应的参数信息并处理。
16.作为进一步的技术限定,在所述将所接收到的客户端数据信息写入接收队列并存储的过程中,启动接收线程,使用epoll设置可读集,通过epoll运用到io多路复用技术和非阻塞io技术,根据所设置的可读集判断是否有事件通知,根据epoll设置可读集的超时时间,当tcp链路超时时,重新设置可读集;当有事件通知则进行socket集合遍历过程;通过对socket集合的遍历来判断是否有数据接收,socket集合遍历的过程是对接收线程管理的所有socket进行遍历,当遍历完成并没有发现事件时,则重新返回设置可读集进行下一轮判断,当发现有数据事件时,则进行数据接收;接收每个socket的数据,判断所接收到的数据是否是完整的协议报文,若是,则放入到内存池技术的接收消息队列,向工作线程发送接收线程指令,若否,则重新返回设置可读集进行下一轮判断。
17.进一步的,所述接收队列属于多线程的共享资源,使用加锁技术,在epoll和数据接收队列处理中使用到事件触发机制,在接收线程与消息的接收队列之间的写入过程使用负载均衡技术。
18.进一步的,设置可读集,设定好约定的超时时间,在无处理消息到来之前,一直处在阻塞状态,当检测到超时时,进行超时处理:从epoll队列中删除socket链路句柄,设置可读集,当收到接收线程的处理通知时,接收消息内容,对消息进行分析,再根据消息的内容到指定的接收队列中取数据,再对数据进行相应的处理。
19.作为进一步的技术限定,所述接收线程先所述工作线程发送指令时采用负载均衡策略。
20.根据一些实施例,本公开的第二方案提供了一种嵌入式数据传输系统,采用如下技术方案:
21.一种嵌入式数据传输系统,包括:
22.接收模块,其被配置为接收线程接收来自客户端的数据信息,将所接收到的客户端数据信息写入接收队列并存储;
23.传输模块,其被配置为工作线程接收到接收线程指令后,提取接收线程指令中的参数信息,确定所获取参数信息的接收队列的所属接收线程,完成所属的接收线程与相对应工作线程之间的数据传输;
24.其中,一个所述接收队列对应一个工作线程,一个所述接收线程至少对应两个接收队列。
25.根据一些实施例,本公开的第三方案提供了一种计算机可读存储介质,采用如下技术方案:
26.一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开第一方面所述的嵌入式数据传输方法中的步骤。
27.根据一些实施例,本公开的第四方案提供了一种电子设备,采用如下技术方案:
28.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开第一方面所述的嵌入式数据传输方法中的步骤。
29.与现有技术相比,本公开的有益效果为:
30.本公开提出了一种嵌入式高并发、高性能数据传输框架,支持数据采集终端高并发接入,有效提升变电站在线监测、辅助设备监测等业务系统的实时上传、数据接入可靠性能力,优化业务系统数据不间断稳定传输功能。同时减少占用大量的服务器资源及机房资源,造成资源的浪费,达到优化整个电网系统的目的。
附图说明
31.构成本公开的一部分的说明书附图用来提供对本公开的进一步理解,本公开的示意性实施例及其说明用于解释本公开,并不构成对本公开的不当限定。
32.图1是本公开实施例一中的嵌入式数据传输方法的流程图;
33.图2是本公开实施例一中的嵌入式数据传输方法的框架图;
34.图3是本公开实施例一中的链路分发的流程图;
35.图4是本公开实施例一中的recv线程处理的流程图;
36.图5是本公开实施例一中的工作线程处理的流程图;
37.图6是本公开实施例二中的嵌入式数据传输系统的结构框图。
具体实施方式
38.下面结合附图与实施例对本公开作进一步说明。
39.应该指出,以下详细说明都是例示性的,旨在对本公开提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本公开所属技术领域的普通技术人员通常理解的相同含义。
40.需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本公开的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
41.在本公开中,术语如“上”、“下”、“左”、“右”、“前”、“后”、“竖直”、“水平”、“侧”、“底”等指示的方位或位置关系为基于附图所示的方位或位置关系,只是为了便于叙述本公开各部件或元件结构关系而确定的关系词,并非特指本公开中任一部件或元件,不能理解为对本公开的限制。
42.本公开中,术语如“固接”、“相连”、“连接”等应做广义理解,表示可以是固定连接,也可以是一体地连接或可拆卸连接;可以是直接相连,也可以通过中间媒介间接相连。对于
本领域的相关科研或技术人员,可以根据具体情况确定上述术语在本实公开中的具体含义,不能理解为对本公开的限制。
43.在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
44.实施例一
45.本公开实施例一介绍了一种嵌入式数据传输方法。
46.如图1所示的一种嵌入式数据传输方法,包括:
47.接收线程接收来自客户端的数据信息,将所接收到的客户端数据信息写入接收队列并存储;
48.工作线程接收到接收线程指令后,提取接收线程指令中的参数信息,确定所获取参数信息的接收队列的所属接收线程,完成所属的接收线程与相对应工作线程之间的数据传输;
49.其中,一个所述接收队列对应一个工作线程,一个所述接收线程至少对应两个接收队列。
50.为提高并发量和处理性能,本实施例采用如图2所示的2层的设计框架;其中,第一层由接收线程组成,负责接收客户端数据;第二层由工作线程组成,负责对接收的数据进行相应处理。为了减少数据的复制和io操作,将接收到的客户端数据使用队列进行存储;工作线程收到处理指令后,从指令中提取相应的参数,便可知道到哪个线程的队列中获取数据;有效避免了工作线程之间出现竞争的情况;每个工作线程对应一个接收队列,每个接收线程将接收到的数据只放在自己对应的队列中;当工作线程≥2*接收线程时,能够有效的减少接收线程之间的锁竞争的情况。
51.在本实施例中,接收线程采用recv线程。
52.当一个线程通过tcp方式绑定端口后,其他线程或进程想再次绑定该端口时,必将返回错误。而如果让一个listen套接字同时加入到多个recv线程的select的可读集合进行监听,又会出现“惊群”现象:当有一个新的客户端连接请求到来时,所有recv线程都会被惊醒——这显然是应该避免的。为避免“惊群”的出现,本实施例创建链路分发,具体如图3所示,即当有客户端连接请求过来时,该线程调用accept接收来自客户端的连接,再将新socket-fd分发给某一个recv线程,该recv线程再将fd加入select的fd_set中进行监听,从而实现recv线程与客户端的通信。
[0053]“并发量”是指系统可接受的tcp连接请求数。“高并发”只是一个相对概念。如:有些系统1k并发就算是高并发,而有些系统100k并发也不能满足要求。
[0054]
io多路复用中一个select函数最多可管理fd_setsize(一般为1024)个socket套接字,而如果要求并发量达到100k时,显然大大超过了1个select的管理能力,因此,使用多个select可以有效的解决以上问题。100k约等于100*1024,故需要大约100个select才能有效管理100k并发。因fd的管理在进程之间是独立,虽然子进程在创建之时,会继承父进程的fd,但后续连接产生的fd却无法让子进程继续继承,因此要实现对100k并发的有效管理,使用多线程实现高并发是理想的选择。
[0055]
在理想情况下,启动n个接收线程,系统便可以处理n*1024的并发。但是,线程越多,消耗的资源越多,操作系统调用的开销就越大,如果调度开销超过多线程带来的性能提升,随着线程的增加,将导致系统性能越低。如果处理5k以上的请求,使用多线程+epoll方
式是最好的选择。
[0056]
为了提高recv线程接收来自客户端的数据性能,其处理过程需要使用到:io多路复用技术,非阻塞io技术、内存池技术、加锁技术、事件触发机制、负载均衡策略、设计模式等,如图4所示,recv线程的处理流程为:开启启动recv线程,使用epoll设置可读集,通过epoll运用到io多路复用技术和非阻塞io技术,根据设置可读集,判断是否有事件通知,根据epoll设置可读集的超时时间,当tcp链路超时时,重新设置可读集,有事件通知则进行socket集合遍历过程,通过对socket集合的遍历进行判断是否有数据接收,socket集合遍历的过程是对本recv线程管理的所有socket进行遍历,当遍历完成并没有发现事件时,则重新返回设置可读集进行下一轮判断,当发现有数据事件时,进行数据接收,接收每个socket的数据后判断是否接收到完整的协议报文,当没有接收到完整的协议报文时,则重新变量socket集合继续接收,当接收到完整的协议报文时,则放入到内存池技术的接收消息队列,然后通知工作线程。
[0057]
由于接收消息队列属于多线程的共享资源,便使用到加锁技术,在epoll和数据接收队列处理中使用到事件触发机制,在多线程recv与消息队列之间的写入过程使用到负载均衡技术,在整个编码过程中使用了多种设计模式:抽象工厂模式、单例模式、组合模式、适配器模式、观察者模式等。
[0058]
为减少数据的复制,在接收数据开始时,recv线程就为将要接收的数据从接收队列中分配一块空间。当recv线程接收到一条完整的客户端数据后,则通过uninx-udp发送消息,告知某一工作线程到指定接收队列中取走数据进行处理。recv线程通知工作线程的过程需要采用负载均衡策略。
[0059]
如图5所示的工作线程的处理流程,即设置可读集,设定好约定的超时时间,在无处理消息到来之前,一直处在阻塞状态,当检测到超时时,进行超时处理:从epoll队列中删除socket链路句柄,设置可读集,当有recv线程的处理通知时,也可以判断有新消息数据可以接收,则接收消息内容,对消息进行分析,再根据消息的内容到指定的接收队列中取数据,再对数据进行相应的处理。
[0060]
本实施例介绍了一种嵌入式高并发、高性能数据传输框架,支持数据采集终端高并发接入,有效提升变电站在线监测、辅助设备监测等业务系统的实时上传、数据接入可靠性能力,优化业务系统数据不间断稳定传输功能。同时减少占用大量的服务器资源及机房资源,造成资源的浪费,达到优化整个电网系统的目的。
[0061]
实施例二
[0062]
本公开实施例二介绍了一种嵌入式数据传输系统。
[0063]
如图6所示的一种嵌入式数据传输系统,包括:
[0064]
接收模块,其被配置为接收线程接收来自客户端的数据信息,将所接收到的客户端数据信息写入接收队列并存储;
[0065]
传输模块,其被配置为工作线程接收到接收线程指令后,提取接收线程指令中的参数信息,确定所获取参数信息的接收队列的所属接收线程,完成所属的接收线程与相对应工作线程之间的数据传输;
[0066]
其中,一个所述接收队列对应一个工作线程,一个所述接收线程至少对应两个接收队列。
[0067]
详细步骤与实施例一提供的嵌入式数据传输方法相同,在此不再赘述。
[0068]
实施例三
[0069]
本公开实施例三提供了一种计算机可读存储介质。
[0070]
一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如本公开实施例一所述的嵌入式数据传输方法中的步骤。
[0071]
详细步骤与实施例一提供的嵌入式数据传输方法相同,在此不再赘述。
[0072]
实施例四
[0073]
本公开实施例四提供了一种电子设备。
[0074]
一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如本公开实施例一所述的嵌入式数据传输方法中的步骤。
[0075]
详细步骤与实施例一提供的嵌入式数据传输方法相同,在此不再赘述。
[0076]
以上所述仅为本公开的优选实施例而已,并不用于限制本公开,对于本领域的技术人员来说,本公开可以有各种更改和变化。凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
[0077]
上述虽然结合附图对本公开的具体实施方式进行了描述,但并非对本公开保护范围的限制,所属领域技术人员应该明白,在本公开的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本公开的保护范围以内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1