CN117376399A - 数据处理方法、装置、设备及介质 - Google Patents

数据处理方法、装置、设备及介质 Download PDF

Info

Publication number
CN117376399A
CN117376399A CN202210777448.9A CN202210777448A CN117376399A CN 117376399 A CN117376399 A CN 117376399A CN 202210777448 A CN202210777448 A CN 202210777448A CN 117376399 A CN117376399 A CN 117376399A
Authority
CN
China
Prior art keywords
client
data
target
client management
packet
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
Application number
CN202210777448.9A
Other languages
English (en)
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.)
Tsinghua University
Nuctech Co Ltd
Original Assignee
Tsinghua University
Nuctech 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 Tsinghua University, Nuctech Co Ltd filed Critical Tsinghua University
Priority to CN202210777448.9A priority Critical patent/CN117376399A/zh
Publication of CN117376399A publication Critical patent/CN117376399A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/14Session management
    • H04L67/141Setup of application sessions

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer And Data Communications (AREA)

Abstract

本公开提供了一种数据处理方法,可以应用于物联网领域和通信领域。该数据处理方法包括:响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与目标客户端的连接,其中,异步连接请求包括N个,N≥2;利用工作线程检测完成端口的状态,得到状态检测结果;在状态检测结果表征与目标客户端的连接建立完成的情况下,创建客户端管理对象;针对异步连接请求进行初始化,并向完成端口投递初始化后的异步连接请求,以便保证完成端口中保持N个异步连接请求;以及在TCP服务监听停止时,工作线程退出运行,以便释放工作线程占用的完成端口资源。本公开还提供了一种数据处理装置、设备、存储介质和程序产品。

Description

数据处理方法、装置、设备及介质
技术领域
本公开涉及物联网领域、通信领域,具体地涉及一种数据处理方法、装置、设备、介质和程序产品。
背景技术
在目前的数据采集系统中,一般是从远程的数据采集设备获取实时数据,将采集到的实时数据发送至服务器中,以此实现对远程的数据采集设备的智能监听以及管理。针对每个数据采集设备,需要一个对应的线程来实现对数据采集设备进行管理。在数据采集设备的数量较多的情况下,可以通过增加服务器的线程数量,来实现实时接收数据采集设备传输的数据。这会对服务器造成严重的负载压力,进而导致数据采集系统的运行不稳定。
发明内容
鉴于上述问题,本公开提供了一种数据处理方法、装置、设备、介质和程序产品。
根据本公开的第一个方面,提供了一种数据处理方法,包括:
响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与上述目标客户端的连接,其中,上述异步连接请求包括N个,N≥2;
利用工作线程检测上述完成端口的状态,得到状态检测结果;
在上述状态检测结果表征与上述目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,上述客户端管理对象用于接收来自上述客户端的数据,以及向上述客户端发送数据;
针对上述异步连接请求进行初始化,并向上述完成端口投递初始化后的异步连接请求,以便保证上述完成端口中保持N个上述异步连接请求;以及
在TCP服务监听停止时,上述工作线程退出运行,以便释放上述工作线程占用的完成端口资源。
根据本公开的实施例,上述客户端管理对象包括多个数据接收对象;
上述数据处理方法还包括:
向多个上述数据接收对象中的空闲数据接收对象投递目标接收请求,得到占用数据接收对象;
在上述状态检测结果表征接收到来自目标客户端的客户端数据包的情况下,利用上述占用数据接收对象接收上述客户端数据包;
将上述占用数据接收对象中的客户端数据包放入接收数据链表;
对上述占用数据接收对象进行初始化,得到新的空闲数据接收对象。
根据本公开的实施例,上述数据处理方法还包括:
解析上述接收数据链表中的客户端数据包,确定上述客户端数据包的解析结果;
根据上述解析结果,对上述客户端数据包进行处理,得到回复数据链表;
删除上述接收数据链表中已经解析过的客户端数据包。
根据本公开的实施例,根据上述解析结果,对上述客户端数据包进行处理,得到回复数据链表包括:
在上述解析结果表征上述客户端数据包为心跳包的情况下,生成第一回复包;
在上述解析结果表征上述客户端数据包为设备命令信息包的情况下,更新上述客户端管理对象的设备标识信息,并生成第二回复包;
在上述解析结果表征上述客户端数据包为客户端回复数据包的情况下,触发客户端回复事件,生成第三回复包;
根据上述第一回复包、第二回复包和第三回复包,构建回复数据链表。
根据本公开的实施例,上述客户端管理对象包括多个数据发送对象;
上述数据处理方法还包括:
在上述状态检测结果表征发送目标数据的情况下,利用多个上述数据发送对象中的空闲数据发送对象投递目标发送请求,得到占用数据发送对象;
利用上述占用数据发送对象发送上述目标数据;
对上述占用数据对象初始化,得到新的空闲数据发送对象。
根据本公开的实施例,上述数据处理方法还包括:
构建客户端管理链表,其中,上述客户端管理链表包括至少一个上述客户端管理对象;
利用心跳线程轮询上述客户端管理链表,确定上述客户端管理链表中每个客户端管理对象的连接空闲时长;
在上述客户端管理链表中的候选客户端管理对象的连接空闲时长大于预设空闲阈值的情况下,将上述候选客户端管理对象从上述客户端管理链表中删除,并关闭上述候选客户端管理对象,以便与上述候选客户端管理对象对应的目标客户端断开连接。
根据本公开的实施例,上述数据处理方法还包括:
在上述状态检测结果表征与上述目标客户端连接异常的情况下,将上述目标客户端管理对象从上述客户端管理链表中删除,并关闭上述目标客户端管理对象,以便与上述目标客户端管理对象对应的目标客户端断开连接。
根据本公开的实施例,在将上述候选客户端管理对象或上述目标客户端管理对象从上述客户端管理链表中删除之前,上述方法还包括:
在断开客户端连接函数中,生成客户端退出对象;
将上述客户端退出对象添加到上述客户端管理链表;
在将上述候选客户端管理对象或上述目标客户端管理对象从上述客户端管理链表中删除之后,触发客户端操作事件,以便通知上层应用软件更新在线设备表。
根据本公开的实施例,响应于监听到客户端的连接请求,利用完成端口中的异步连接请求建立与上述客户端的连接还包括:
响应于监听到上述目标客户端的连接请求,利用上述完成端口中的异步连接请求,将上述目标客户端对应的目标套接字与上述完成端口绑定,以便与上述目标客户端建立连接。
根据本公开的实施例,在TCP服务监听停止时,上述工作线程退出运行包括:
在上述TCP服务监听停止前,利用上述完成端口向上述工作线程发送退出指令包;
响应于检测到上述退出指令包,上述工作线程退出运行;
其中,在上述工作线程退出运行之前,上述数据处理方法还包括:
在上述工作线程中设置第一退出事件;
在上述工作线程退出运行之前,触发上述第一退出事件。
根据本公开的实施例,上述数据处理方法还包括:在上述TCP服务监听停止时,心跳线程退出运行。
根据本公开的实施例,上述数据处理方法还包括:
在上述心跳线程中设置第二退出事件;
在上述心跳线程退出运行之前,触发上述第二退出事件。
根据本公开的实施例,上述目标客户端包括气味嗅探仪设备。
根据本公开的实施例,上述数据处理方法还包括:
基于上述服务端的CPU内核数量构建工作线程,其中,上述工作线程的数量等于上述CPU内核数量与工作线程系数的乘积,以及冗余工作线程数量之和。
本公开的第二方面提供了一种数据处理装置,包括:
连接模块,用于响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与上述目标客户端的连接,其中,上述异步连接请求包括N个,N≥2;
检测模块,用于利用工作线程检测上述完成端口的状态,得到状态检测结果;
创建模块,用于在上述状态检测结果表征与上述目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,上述客户端管理对象用于接收来自上述客户端的数据,以及向上述客户端发送数据;
第一初始化模块,用于针对上述异步连接请求进行初始化,并向上述完成端口投递初始化后的异步连接请求,以便保证上述完成端口中保持N个上述异步连接请求;以及
退出模块,用于在TCP服务监听停止时,上述工作线程退出运行,以便释放上述工作线程占用的完成端口资源。
本公开的第三方面提供了一种电子设备,包括:一个或多个处理器;存储器,用于存储一个或多个程序,其中,当上述一个或多个程序被上述一个或多个处理器执行时,使得一个或多个处理器执行上述数据处理方法。
本公开的第四方面还提供了一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行上述数据处理方法。
本公开的第五方面还提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述数据处理方法。
附图说明
通过以下参照附图对本公开实施例的描述,本公开的上述内容以及其他目的、特征和优点将更为清楚,在附图中:
图1示意性示出了根据本公开实施例的数据处理方法、装置的应用场景图;
图2示意性示出了根据本公开实施例的数据处理方法的流程图;
图3示意性示出了根据本公开另一实施例的数据处理方法的流程图;
图4示意性示出了根据本公开又一实施例的数据处理方法的流程图;
图5示意性示出了根据本公开实施例的根据解析结果,对客户端数据包进行处理,得到回复数据链表的流程图;
图6示意性示出了根据本公开又一实施例的数据处理方法的流程图;
图7示意性示出了根据本公开再一实施例的数据处理方法的流程图;
图8示意性示出了根据本公开实施例的数据处理装置的结构框图;以及
图9示意性示出了根据本公开实施例的适于实现数据处理方法的电子设备的方框图。
具体实施方式
以下,将参照附图来描述本公开的实施例。但是应该理解,这些描述只是示例性的,而并非要限制本公开的范围。在下面的详细描述中,为便于解释,阐述了许多具体的细节以提供对本公开实施例的全面理解。然而,明显地,一个或多个实施例在没有这些具体细节的情况下也可以被实施。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本公开的概念。
在此使用的术语仅仅是为了描述具体实施例,而并非意在限制本公开。在此使用的术语“包括”、“包含”等表明了所述特征、步骤、操作和/或部件的存在,但是并不排除存在或添加一个或多个其他特征、步骤、操作或部件。
在此使用的所有术语(包括技术和科学术语)具有本领域技术人员通常所理解的含义,除非另外定义。应注意,这里使用的术语应解释为具有与本说明书的上下文相一致的含义,而不应以理想化或过于刻板的方式来解释。
在使用类似于“A、B和C等中至少一个”这样的表述的情况下,一般来说应该按照本领域技术人员通常理解该表述的含义来予以解释(例如,“具有A、B和C中至少一个的系统”应包括但不限于单独具有A、单独具有B、单独具有C、具有A和B、具有A和C、具有B和C、和/或具有A、B、C的系统等)。
在相关技术中,用于接收数据并进行数据处理的服务器往往针对每个数据采集设备,都需要构建一个对应的线程来实现接收该数据采集设备传输的数据,并利用该线程实现管理该数据采集设备。例如针对不同类型的气味嗅探仪,为了实现对多台气味嗅探设备集中监控、集中管理气味嗅探设备发送的数据,服务器端通常使用多线程Socket编程进行集成,设备端软件与管理端软件通过网络进行通信,气味嗅探设备即插即管理;当气味嗅探设备有新的检测数据时,立即向服务器端的管理端软件发送;管理端软件可对气味嗅探设备进行简单管理,实现数据远程测量、味嗅探设备重启和关机等管理工作。由于对每个气味嗅探设备均需要创建一个工作线程,来对相应的气味嗅探设备进行管理,因此在设备数量增加的情况下,需要通过增加服务器的工作线程数量来实现实时接收气味嗅探设备发送的数据,并实现对气味嗅探设备的集成管理。从而耗费大量的服务器线程资源,对服务器造成较严重的负载压力,在服务器处理高并发数据的情况下,需要不断切换线程来满足数据接收,导致服务器的性能下降,运行不稳定
针对上述问题,本公开的实施例提供了一种数据处理方法,包括:响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与目标客户端的连接,其中,异步连接请求包括N个,N≥2;利用工作线程检测完成端口的状态,得到状态检测结果;在状态检测结果表征与目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,客户端管理对象用于接收来自客户端的数据,以及向客户端发送数据;针对异步连接请求进行初始化,并向完成端口投递初始化后的异步连接请求,以便保证完成端口中保持N个异步连接请求;以及在TCP服务监听停止时,工作线程退出运行,以便释放工作线程占用的完成端口资源。
根据本公开的实施例,由于利用完成端口的N个异步连接请求建立与目标客户端的连接,在检测到目标客户端发送的请求的情况下,可以利用客户端管理对象实现接收来自目标客户端的数据和向目标客户端发送数据,在检测到目标客户端已经与完成端口建立连接的情况下,可以将用于建立连接的异步连接请求进行初始化,从而保证完成端口中持续保持N个异步连接请求,从而使其他客户端向完成端口发送数据或需要建立连接时,可以调用N个异步连接请求中的任意一个,至少部分解决了数据高并发状态下,需要频繁切换工作线程来满足数据传输需求的技术问题,同时在TCP服务监听停止时,工作线程可以退出运行,从而释放了工作线程所占用的完成端口资源,从而避免给CPU造成性能影响,提升服务器的数据处理效率,并进一步增强服务器集成多个客户端的数据处理需求能力。同时避免了针对不同系统类型的客户端系统采用不同的通信协议进行通讯的缺点,进一步增强了服务器的适配性。
在本公开的技术方案中,所涉及的用户个人信息的收集、存储、使用、加工、传输、提供、公开和应用等处理,均符合相关法律法规的规定,采取了必要保密措施,且不违背公序良俗。
在本公开的技术方案中,在获取或采集用户个人信息之前,均获取了用户的授权或同意。
图1示意性示出了根据本公开实施例的数据处理方法、装置的应用场景图。
如图1所示,根据该实施例的应用场景100可以包括终端设备101、102、103、网络104和服务器105。网络104用以在终端设备101、102、103和服务器105之间提供通信链路的介质。网络104可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
用户可以使用终端设备101、102、103通过网络104与服务器105交互,以接收或发送消息等。终端设备101、102、103上可以安装有各种通讯客户端应用,例如购物类应用、网页浏览器应用、搜索类应用、即时通信工具、邮箱客户端、社交平台软件等(仅为示例)。
终端设备101、102、103可以是具有显示屏并且支持网页浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
服务器105可以是提供各种服务的服务器,例如对用户利用终端设备101、102、103所浏览的网站提供支持的后台管理服务器(仅为示例)。后台管理服务器可以对接收到的用户请求等数据进行分析等处理,并将处理结果(例如根据用户请求获取或生成的网页、信息、或数据等)反馈给终端设备。
需要说明的是,本公开实施例所提供的数据处理方法一般可以由服务器105执行。相应地,本公开实施例所提供的数据处理装置一般可以设置于服务器105中。本公开实施例所提供的数据处理方法也可以由不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群执行。相应地,本公开实施例所提供的数据处理装置也可以设置于不同于服务器105且能够与终端设备101、102、103和/或服务器105通信的服务器或服务器集群中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
以下将基于图1描述的场景,通过图2~图7对公开实施例的数据处理方法进行详细描述。
图2示意性示出了根据本公开实施例的数据处理方法的流程图。
如图2所示,该实施例的数据处理方法可以包括操作S210~操作S250。
在操作S210,响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与目标客户端的连接,其中,异步连接请求包括N个,N≥22。
在操作S220,利用工作线程检测完成端口的状态,得到状态检测结果。
在操作S230,在状态检测结果表征与目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,客户端管理对象用于接收来自客户端的数据,以及向客户端发送数据。
在操作S240,针对异步连接请求进行初始化,并向完成端口投递初始化后的异步连接请求,以便保证完成端口中保持N个异步连接请求。
在操作S250,在TCP服务监听停止时,工作线程退出运行,以便释放工作线程占用的完成端口资源。
根据本公开的实施例,利用完成端口智能调用工作线程,避免频繁地工作线程切换,可以最大限度地提高网络通信的性能。同时,工作线程可能会有Sleep()或者WaitForSingleObjec()之类的空闲情况,这样同一个CPU上的另一个工作线程就可以代替这个Sleep的工作线程执行连接操作,根据完成端口的智能调度性能,充分发挥CPU的工作性能,
根据本公开的实施例,完成端口(Input/Output Completion Port,IOCP)可以是能够支持多个同时发生的异步I/O操作的应用程序接口。异步连接请求可以包括AcceptEx请求,利用异步连接请求的特性,实现后续异步采集目标客户端发送的数据。N个异步连接请求可以是预先投递至完成端口中的。
根据本公开的实施例,可以使用GetQueuedCompletionStatus函数检测完成端口的状态,将连接请求从完成端口的队列中取出来进行检测,在状态检测结果表征与目标客户端的连接建立完成时,即可以表征已经与新的目标客户端建立了连接,从而针对该目标客户端创建客户端管理对象,用于实现与该目标客户端进行数据传输。
需要说明的是,在创建了客户端管理对象后,如果后续检测到与新的客户端建立连接,可以利用该客户端管理对象实现与新的客户端之间的数据传输,或者还可以根据新的客户端创建相对应的客户端管理对象,本公开对客户端管理对象的数量不做限定。
在本公开的一个实施例中,利用创建的客户端管理对象管理一个或多个目标客户端,以节省创建客户端管理对象的计算负载。
根据本公开的实施例,在与目标客户端建立连接后,对用于建立连接的异步连接请求进行初始化,并将初始化后的异步连接请求投递至完成端口,从而可以循环利用完成端口中的N个异步连接请求,持续响应新的客户端的连接请求,进而可以并行处理多个新的客户端的连接请求,提高并行处理能力。相对于accept只能阻塞方式建立一个连接的入口,对于大量的并发的客户端而言,避免了连接入口拥挤,始终可以保持有N个异步连接请求用于与客户端建立连接,从而可以提高处理客户端连接请求的处理效率,提高客户端连接性能。
根据本公开的实施例,可以使用WSAIoctl来获取异步连接请求和GetAcceptExSockAddrs函数的指针,再通过指针调用异步连接请求和GetAcceptExSockAddrs函数,从而无需每次使用AcceptEx和GetAcceptExSockAddrs函数都要进行获取指针操作,从而可以进一步提高系统性能。
根据本公开的实施例,由于利用完成端口的N个异步连接请求建立与目标客户端的连接,在检测到目标客户端发送的请求的情况下,可以利用客户端管理对象实现接收来自目标客户端的数据和向目标客户端发送数据,在检测到目标客户端已经与完成端口建立连接的情况下,可以将用于建立连接的异步连接请求进行初始化,从而保证完成端口中持续保持有N个异步连接请求,从而使其他客户端向完成端口发送数据或需要建立连接时,完成端口可以根据工作线程的实际工作状态,智能选择工作线程来处理目标客户端发送的请求,至少部分解决了数据高并发状态下,需要频繁切换工作线程来满足数据传输需求的技术问题,同时在TCP服务监听停止时,工作线程可以退出运行,从而释放了工作线程所占用的完成端口资源,从而避免给CPU造成性能影响,提升服务器的数据处理效率,并进一步增强服务器集成多个客户端的数据处理需求能力。同时避免了针对不同系统类型的客户端系统采用不同的通信协议进行通讯的缺点,进一步增强了服务器的适配性。
根据本公开的实施例,操作S210,响应于监听到客户端的连接请求,利用完成端口中的异步连接请求建立与客户端的连接还可以包括如下操作。
响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求,将目标客户端对应的目标套接字与完成端口绑定,以便与目标客户端建立连接。
根据本公开的实施例,可以首先初始化套接字(Socket)库,并将套接字库中的套接字参数进行初始化,在监听到连接请求的情况下,可以利用监听套接字(ListenSocket)与目标客户端对应的目标套接字连接,从而实现目标客户端与完成端口绑定。
根据本公开的实施例,通过完成端口与目标客户端进行绑定,可以进一步设置监听参数,例如监听客户端数量等,从而实现后续的与目标客户端建立连接,以提高监听效率。
根据本公开的实施例,数据处理方法还可以包括如下操作。
基于服务端的CPU内核数量构建工作线程,其中,工作线程的数量等于CPU内核数量与工作线程系数的乘积,以及冗余工作线程数量之和。
根据本公开的实施例,工作线程系数可以是任意自然数,例如2、3等,冗余工作线程数量可以是任意不小于0的整数。工作线程可以包括用于与目标客户端建立连接的连接线程,以及用于进行数据处理的处理线程。
在本公开的一个实施例中,工作线程系数可以是2,冗余工作线程数量可以是2,即工作线程数量=CPU数量×2+2。
在本公开的另一个实施例中,工作线程系数可以是2,冗余工作线程数量可以是0,即工作线程数量=CPU数量×2。
根据本公开的实施例,通过合理构建工作线程的数量,可以保持始终有空闲的工作线程用于处理目标客户端发送的数据包,以提升并行处理效率,平衡CPU负载。
根据本公开的实施例,客户端管理对象可以包括多个数据接收对象。
图3示意性示出了根据本公开另一实施例的数据处理方法的流程图。
如图3所示,该实施例的数据处理方法还可以包括操作S310~操作S340。
在操作S310,向多个数据接收对象中的空闲数据接收对象投递目标接收请求,得到占用数据接收对象。
在操作S320,在状态检测结果表征接收到来自目标客户端的客户端数据包的情况下,利用占用数据接收对象接收客户端数据包。
在操作S330,将占用数据接收对象中的客户端数据包放入接收数据链表。
在操作S340,对占用数据接收对象进行初始化,得到新的空闲数据接收对象。
根据本公开的实施例,空闲数据接收对象可以是多个数据接收对象中处于空闲状态的数据接收对象。可以向空闲数据接收对象投递目标接收请求(WSARecv请求),并将空闲数据接收对象标记为占用数据接收对象,使占用数据接收对象可以用于接收来自目标客户端的客户端数据包。
在本公开的一个实施例中,可以将客户端数据包存储至缓冲区中,并更新在线时间ActiveDateTime在客户端数据包放入至接收数据链表后,可以删除缓冲区中的相应的客户端数据包。在将客户端数据包从缓冲区放入接收数据包之前,还可以判断数据包长度,在数据包长度小于小于协议数据长度,可以不做进一步处理。在数据长度大于或等于协议数据长度时,则对客户端数据包进行解包,并放入接收数据链表,根据不同协议对接收数据链表进行进一步处理。
根据本公开的实施例,当与新的目标客户端连接时,可以创建一个新的客户端连接对象,并将客户端管理对象添加至MAP链表,使用目标客户端的IP地址和与目标客户端对应的目标套接字作为该目标客户端的标识。
根据本公开的实施例,数据接收对象的数量可以是K个,K≥1,在对占用数据接收对象进行初始化后,可以得到新的空闲数据接收对象。从而可以始终保持冗余的数据接收对象用于接收客户端数据包,从而针对同一目标客户端可以实现连续接收数据,并使用异步数据接收WSARecv函数,实现服务端和目标客户端网络同一时间双工收、发数据,避免数据包积压无法得到处理,并提高双方交换数据的速度。
需要说明的是,数据接收对象的数量K可以包括任意数量,例如1个、2个、5个等,本领域的技术人员可以根据实际情况进行选择。为了不影响CPU的数据处理速度,可以将K的取值设定为小于或等于10的任意数值。
图4示意性示出了根据本公开又一实施例的数据处理方法的流程图。
如图4所示,该实施例的数据处理方法还可以包括操作S410~操作S430。
在操作S410,解析接收数据链表中的客户端数据包,确定客户端数据包的解析结果。
在操作S420,根据解析结果,对客户端数据包进行处理,得到回复数据链表。
在操作S430,删除接收数据链表中已经解析过的客户端数据包。
根据本公开的实施例,在接收数据链表中客户端数据包的个数大于0的情况下,可以从接收数据链表中依次取出客户端数据包,并根据通讯协议对数据包进行解析,得到解析结果,解析结果可以表征客户端数据包的类型,例如可以是一般客户端命令、心跳数据包类型等,解析后的客户端数据包可以放入管理端缓冲区进行后续处理,触发相应的数据操作。同时根据解析结果可以生成回复包,将回复包放入至回复数据链表,以便向目标客户端发送回复数据链表。
进一步地,可以在发送回复数据链表后删除回复数据链表中已经解析过的客户端数据包,从而为后续的客户端数据包解析提供空闲的链表存储空间,以维持循环接收数据包。
图5示意性示出了根据本公开实施例的根据解析结果,对客户端数据包进行处理,得到回复数据链表的流程图。
如图5所示,操作S420,根据解析结果,对客户端数据包进行处理,得到回复数据链表可以包括操作S510~操作S540。
在操作S510,在解析结果表征客户端数据包为心跳包的情况下,生成第一回复包。
在操作S520,在解析结果表征客户端数据包为设备命令信息包的情况下,更新客户端管理对象的设备标识信息,并生成第二回复包。
在操作S530,在解析结果表征客户端数据包为客户端回复数据包的情况下,触发客户端回复事件,生成第三回复包。
在操作S540,根据第一回复包、第二回复包和第三回复包,构建回复数据链表。
根据本公开的实施例,通过根据解析结果,可以判定客户端数据包的具体类型为心跳包、设备命令信息包或客户端回复数据包的任意一种,从而可以对客户端数据包实现差别化管理,方便根据客户端数据包的不同类型进行分类处理,并根据解析结果及时向目标客户端回复相应的数据包,提升数据处理效率的同时,还可以实现对目标客户端设备端进行远程测量、重启、关机等远程管理和实时控制。
根据本公开的实施例,其中,客户端管理对象包括多个数据发送对象。
图6示意性示出了根据本公开又一实施例的数据处理方法的流程图。
如图6所示,数据处理方法还可以包括操作S610~操作S630。
在操作S610,在状态检测结果表征发送目标数据的情况下,利用多个数据发送对象中的空闲数据发送对象投递目标发送请求,得到占用数据发送对象。
在操作S620,利用占用数据发送对象发送目标数据。
在操作S630,对占用数据对象初始化,得到新的空闲数据发送对象。
根据本公开的实施例,空闲数据发送对象可以是多个数据发送对象中处于空闲状态的数据发送对象。可以向空闲数据发送对象投递目标发送请求(WSASend请求),并将空闲数据发送对象标记为占用数据发送对象,使占用数据发送对象可以用于向自目标客户端发送目标数据。
根据本公开的实施例,目标数据可以包括用于回复目标客户端的第一回复包、第二回复包、第三回复包或回复数据链表。但不仅限于此,还可以是服务端向目标客户端发送的控制指令数据等。
根据本公开的实施例,根据本公开的实施例,数据发送对象的数量可以是L个,L≥1,在对占用数据发送对象进行初始化后,可以得到新的空闲数据发送对象。从而可以始终保持冗余的数据发送对象用于向目标客户端发送目标数据,从而针对同一目标客户端可以实现连续发送数据,并使用异步数据发送WSARecv函数,实现服务端和目标客户端网络同一时间收、发数据,避免目标数据积压,并提高服务端与目标客户端之间的数据交换速度。
需要说明的是,数据发送对象的数量L可以包括任意数量,例如1个、2个、5个等,本领域的技术人员可以根据实际情况进行选择。为了不影响CPU的数据处理速度,可以将L的取值设定为小于或等于10的任意数值。
根据本公开的实施例,数据处理方法还可以包括如下操作。
构建客户端管理链表,其中,客户端管理链表包括至少一个客户端管理对象;利用心跳线程轮询客户端管理链表,确定客户端管理链表中每个客户端管理对象的连接空闲时长;在客户端管理链表中的候选客户端管理对象的连接空闲时长大于预设空闲阈值的情况下,将候选客户端管理对象从客户端管理链表中删除,并关闭候选客户端管理对象,以便与候选客户端管理对象对应的目标客户端断开连接。
根据本公开的实施例,在与新的目标客户端建立连接后,可以创建新的客户端管理对象,并将客户端管理对象放入客户端管理链表。在客户端管理对象接收到来自目标客户端发送的客户端数据包的情况下,可以更新活跃时间ActiveDateTime。
根据本公开的实施例,心跳线程可以对目标客户端进行心跳管理,目标客户端可以通过发送心跳包,以持续更新活跃时间,以维持与服务端的通信连接。在监控到目标客户端连接空闲时长大于预设空闲阈值(例如1分钟)的情况下,可以确定该目标客户端,并调用CloseSocket断开与该目标客户端的连接,将与该目标客户端对应的候选客户端管理对象从客户端管理链表中删除,以释放客户端管理资源,降低CPU负载。
根据本公开的实施例,当接收到目标客户端的数据包时,可以使用目标客户端标识更新客户端管理对象的标识,并使用消息通知上层的应用程序,更新目标客户端状态,方便监控系统更新目标客户端状态显示。目标客户端可以定时向服务端发送心跳包,以维持网络连接。服务端的心跳线程定时遍历客户端管理对象MAP链表,如果某个客户端管理对象心跳间隔超过预设空闲时长阈值(例如120s),则断开与该客户端管理对象对应的目标客户端的连接,从客户端管理对象MAP链表中移除该客户端管理对象,并发消息通知应用程度,更新目标客户端状态表,退出软件时,可以清空客户端管理对象MAP链表。通过以上措施,可以实现针对目标客户端连接超时情况实现自动在线连接管理目标客户端。
根据本公开的实施例,数据处理方法还可以包括如下操作。
在状态检测结果表征与目标客户端连接异常的情况下,将目标客户端管理对象从客户端管理链表中删除,并关闭目标客户端管理对象,以便与目标客户端管理对象对应的目标客户端断开连接。
根据本公开的实施例,连接异常可以通过解析客户端数据包的解析结果来判定,例如解析结果包含有乱数据、病毒数据等,可以确定状态检测结果表征与目标客户端连接异常。或者还可以根据其他方式判断与目标客户端连接异常,本公开的实施例对判定与目标客户端连接异常的具体方法不做限定。
根据本公开的实施例,在状态检测结果表征与目标客户端连接异常的情况下,从客户端管理链表中移除该客户端管理对象,并发消息通知应用程度,更新目标客户端状态表,退出软件时,可以清空客户端管理对象MAP链表。通过以上措施,可以实现针对目标客户端连接异常情况实现自动在线连接管理目标客户端。
根据本公开的实施例,在将候选客户端管理对象或目标客户端管理对象从客户端管理链表中删除之前,数据处理方法还可以包括如下操作。
在断开客户端连接函数中,生成客户端退出对象;将客户端退出对象添加到客户端管理链表;在将候选客户端管理对象或目标客户端管理对象从客户端管理链表中删除之后,触发客户端操作事件,以便通知上层应用软件更新在线设备表。
根据本公开的实施例,触发客户端操作事件,还可以通知上层应用软件进行其他的处理操作,例如通知目标客户端断开连接等操作。
根据本公开的实施例,在TCP服务监听停止时,工作线程退出运行可以包括如下操作。
在TCP服务监听停止前,利用完成端口向工作线程发送退出指令包;响应于检测到退出指令包,工作线程退出运行。
其中,在工作线程退出运行之前,数据处理方法还可以包括如下操作。
在工作线程中设置第一退出事件;在工作线程退出运行之前,触发第一退出事件。
根据本公开的实施例,可以使用PostQueuedCompletionStatus接口,为每一个用于接收连接请求的工作线程都发送一个退出指令包,有几个工作线程就发送几遍,退出指令包中的dwCompletionKey参数设置为NULL,从而使每一个工作线程在接收到完成通知的时候,如果发现退出指令包中的dwCompletionKey参数被设置成了NULL,那么工作线程就会判定应用程序发送的数据包为退出指令包,从而使工作线程可以“优雅”地退出运行,避免连接线程占用造成CPU负载升高。
根据本公开的实施例,为了避免工作线程接收不到退出指令包,在工作线程中设置第一退出事件(Event),在工作线程进行退出运行时触发第一退出事件,以确保工作线程每次就只会调用一轮GetQueuedCompletionStatus函数,避免GetQueuedCompletionStatus函数重复检测工作线程的状态的同时,保证工作线程可以正常退出。
根据本公开的实施例,数据处理方法还可以包括如下操作。
在TCP服务监听停止时,心跳线程退出运行;
根据本公开的实施例,在在TCP服务监听停止时,可以采用与工作线程退出运行相同或相似的方法,来使心跳线程退出运行,从而进一步释放CPU的计算资源。
根据本公开的实施例,数据处理方法还可以包括如下操作。
在心跳线程中设置第二退出事件;在心跳线程退出运行之前,触发第二退出事件。
图7示意性示出了根据本公开再一实施例的数据处理方法的流程图。
如图7所示,在执行操作S710开始操作后,执行操作S711初始化初始化套接字库,创建完成端口。
在操作S712,将目标套接字与完成端口绑定。
在操作S713,在完成端口用预先投递N个异步连接请求。异步连接请求的数量可以根据实际情况进行设定。
在操作S714,创建并启动M个工作线程。
在操作S7141,启动心跳线程。并在启动心跳线程后,可以通过操作S7142~操作S71411来进行心跳检查。具体流程如下。
在操作S7142,可以判断是否到达轮询时刻。在判断结果为是的情况下,可以执行操作S7143,判断目标客户端连接数量是否大于0。
在操作S7143的判断结果为是的情况下,可以确定已经与目标客户端建立连接,然后可以执行操作S7144,选取目标客户端。
在操作S7145,判断该目标客户端的空闲时长是否大于第一空闲时长阈值,第一空闲时长阈值例如可以为3分钟。
在操作S7145的判断结果为是的情况下,可以执行操作S7146,判断与目标客户端的连接是否正常。
在操作S7146的判断结果为是的情况下,可以执行操作S7147,判断该目标客户端的空闲时长是否超过第二空闲时长阈值。第二空闲时长阈值可以大于第一空闲时长阈值,例如可以为8分钟。
在操作S7147的判断结果为是的情况下,可以执行操作S7148,断开与目标客户端的连接。然后执行操作S7149,移除目标客户端连接对象。
在操作S71410,判断是否完成所有目标客户端的连接检查。在操作S71410的判断结果为是的情况下,可以执行操作S71411,判断用户是否中止心跳线程。
在操作S71411的判断结果为是的情况下,可以执行操作S730,结束操作。
在操作S71411的判断结果为否的情况下,可以执行操作S7142,从而对目标客户端的连接状况进行循环检查。
相应地,在操作S7142的判断结果为否的情况下,可以执行操作S71411,从而直接判断用户是否中止心跳线程。
在操作S7143的判断结果为否的情况下,也可以执行操作S71411。
在操作S7145的判断结果为否的情况下,可以执行操作S71410。
在操作S71416的判断结果为否的情况下,可以执行操作S7418。
在操作S7147的判断结果为否的情况下,可以执行操作S71410,判断是否完成所有目标客户端的连接检查。并进行后续的心跳检查。
在操作S714,创建并启动M个工作线程之后,可以执行操作S715。
在操作S715,判断是否监听到用户中止线程。在判断结果为否的情况下,循环执行操作操作S715,从而及时发现中止线程情况。
在判断结果为是的情况下,执行操作S716,通信连接结束,通知工作线程退出。然后执行操作S717,释放套接字库等资源。
在操作S721,调用工作线程,用于建立与目标客户端的连接。在本公开的实施例中,可以利用完成端口对工作线程进行智能化调用。
在操作S722,使用GetQueuedCompletionStatus函数检测完成端口的状态,得到状态检测结果。
在操作S723,根据状态检测结果,判断完成端口操作的类型。
在操作S7241,可以确定完成端口的操作类型为连接完成操作。然后执行操作S725。
在操作S725,创建客户端管理对象,客户端管理对象可以包括K个数据接收对象和L个数据发送对象,分别用于接收目标客户端发送的客户端数据包,以及用于向目标客户端发送目标数据。
在操作S726,将客户端管理对象与完成端口绑定。
在操作S727,投递目标接收请求,用于准备接收目标客户端发送的客户端数据包。目标接收请求的数量可以是多个,以避免客户端数据包积压,提升数据处理效率。
在操作S728,在检测到已经与目标客户端建立连接的情况下,初始化异步连接请求,并向完成端口投递初始化后的异步连接请求,从而保证始终有N个异步连接请求用于与新的客户端建立连接。
在操作S729,判断用户是否中止线程。
在用户中止线程的情况下,可以执行操作S730,结束操作。
相应地,在操作S723,根据状态检测结果,判断完成端口操作的类型。还可以得到完成端口的操作类型为接收完成操作、发送完成操作、正常断开连接操作或异常情况。
在操作S7242,可以确定完成端口的操作类型为接收完成操作或发送完成操作。然后执行操作S7243,回调处理接收到的数据或发送数据。即在完成端口的操作类型为接收完成操作的情况下,回调处理接收到的数据。在完成端口的操作类型为发送完成操作的情况下,回调处理发送数据。然后执行操作S729,判断用户是否中止线程。
在操作S7244,可以确定完成端口的操作类型为正常断开连接操作。然后执行操作S7245,回调处理移除客户端。然后执行操作S729。
在操作S7246,可以确定完成端口的操作类型为异常情况。然后可以执行操作S7247,判断是否为目标客户端异常断开。
在操作S7247的判断结果为是的情况下,可以执行操作S7248,回调处理移除目标客户端。在操作S7247的判断结果为否的情况下,可以执行操作S7249,将异常数据输出到日志。然后执行操作S729。从而实现对不同的完成端口操作类型的操作进行差异化处理,以建立与目标客户端稳定连接的情况下,避免消耗过多CPU计算开销。
根据本公开的实施例,其中,目标客户端可以包括气味嗅探仪设备。
根据本公开的实施例,气味嗅探仪设备可以包括用于检测集装箱熏蒸剂、硫化氢、甲烷等有毒有害气体、可燃气体的检测设备。在实际应用中,通常使用同一个服务端接收多种类型的气味嗅探仪设备发送的检测信息,即每个气味嗅探仪设备可以作为需要与服务端连接的目标客户端。通过利用本公开的实施例提供的数据处理方法,可以增强针对气味嗅探仪设备的组网能力,便于对同一检测区域内多个气味嗅探仪设备的集成管理,高效处理高并发检测数据的同时减轻服务端CPU的负载,从而实现对于相关有毒有害气体、可燃气体的快速响应。
基于上述数据处理方法,本公开还提供了一种数据处理装置。以下将结合图8对该装置进行详细描述。
图8示意性示出了根据本公开实施例的数据处理装置的结构框图。
如图8所示,该实施例的数据处理装置800包括连接模块810、检测模块820、创建模块830、第一初始化模块840和退出模块850。
连接模块810用于响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与目标客户端的连接,其中,异步连接请求包括N个,N≥2;
检测模块820用于利用工作线程检测完成端口的状态,得到状态检测结果。
创建模块830用于在状态检测结果表征与目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,客户端管理对象用于接收来自客户端的数据,以及向客户端发送数据。
第一初始化模块840用于针对异步连接请求进行初始化,并向完成端口投递初始化后的异步连接请求,以便保证完成端口中保持N个异步连接请求。
退出模块850用于在TCP服务监听停止时,工作线程退出运行,以便释放工作线程占用的完成端口资源。
根据本公开的实施例,客户端管理对象包括多个数据接收对象。
数据处理装置还可以包括:第一投递模块、接收模块、第一添加模块和第二初始化模块。
第一投递模块用于向多个数据接收对象中的空闲数据接收对象投递目标接收请求,得到占用数据接收对象。
接收模块用于在状态检测结果表征接收到来自目标客户端的客户端数据包的情况下,利用占用数据接收对象接收客户端数据包;
第一添加模块用于将占用数据接收对象中的客户端数据包放入接收数据链表。
第二初始化模块用于对占用数据接收对象进行初始化,得到新的空闲数据接收对象。
根据本公开的实施例,数据处理装置还可以包括:解析模块、第一处理模块和第一删除模块。
解析模块用于解析接收数据链表中的客户端数据包,确定客户端数据包的解析结果。
第一处理模块用于根据解析结果,对客户端数据包进行处理,得到回复数据链表。
第一删除模块用于删除接收数据链表中已经解析过的客户端数据包。
根据本公开的实施例,第一处理模块可以包括第一生成单元、第二生成单元、第三生成单元和构建单元。
第一生成单元用于在解析结果表征客户端数据包为心跳包的情况下,生成第一回复包。
第二生成单元用于在解析结果表征客户端数据包为设备命令信息包的情况下,更新客户端管理对象的设备标识信息,并生成第二回复包。
第三生成单元用于在解析结果表征客户端数据包为客户端回复数据包的情况下,触发客户端回复事件,生成第三回复包。
构建单元用于根据第一回复包、第二回复包和第三回复包,构建回复数据链表。
根据本公开的实施例,客户端管理对象包括多个数据发送对象。
数据处理装置还可以包括:第二投递模块、发送模块和第三初始化模块。
第二投递模块用于在状态检测结果表征发送目标数据的情况下,利用多个数据发送对象中的空闲数据发送对象投递目标发送请求,得到占用数据发送对象。
发送模块用于利用占用数据发送对象发送目标数据。
第三初始化模块用于对占用数据对象初始化,得到新的空闲数据发送对象。
根据本公开的实施例,数据处理装置还可以包括:构建模块、确定模块和第二删除模块。
构建模块用于构建客户端管理链表,其中,客户端管理链表包括至少一个客户端管理对象。
确定模块用于利用心跳线程轮询客户端管理链表,确定客户端管理链表中每个客户端管理对象的连接空闲时长。
第二删除模块用于在客户端管理链表中的候选客户端管理对象的连接空闲时长大于预设空闲阈值的情况下,将候选客户端管理对象从客户端管理链表中删除,并关闭候选客户端管理对象,以便与候选客户端管理对象对应的目标客户端断开连接。
根据本公开的实施例,数据处理装置还可以包括:第三删除模块。
第三删除模块用于在状态检测结果表征与目标客户端连接异常的情况下,将目标客户端管理对象从客户端管理链表中删除,并关闭目标客户端管理对象,以便与目标客户端管理对象对应的目标客户端断开连接。
根据本公开的实施例,在将候选客户端管理对象或目标客户端管理对象从客户端管理链表中删除之前,数据处理装置还包括:第一生成模块、第一添加模块和第一触发模块。
第一生成模块用于在断开客户端连接函数中,生成客户端退出对象。
第一添加模块用于将客户端退出对象添加到客户端管理链表。
第一触发模块用于在将候选客户端管理对象或目标客户端管理对象从客户端管理链表中删除之后,触发客户端操作事件,以便通知上层应用软件更新在线设备表。
根据本公开的实施例,连接模块还包括连接单元。
连接单元用于响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求,将目标客户端对应的目标套接字与完成端口绑定,以便与目标客户端建立连接。
根据本公开的实施例,退出模块包括:
退出指令发送单元用于在TCP服务监听停止前,利用完成端口向工作线程发送退出指令包。
退出单元用于响应于检测到退出指令包,工作线程退出运行。
其中,在工作线程退出运行之前,数据处理装置还包括:第一设置模块和第一事件触发模块。
第一设置模块用于在工作线程中设置第一退出事件。
第一事件触发模块用于在工作线程退出运行之前,触发第一退出事件。
根据本公开的实施例,数据处理装置还包括心跳线程退出模块。
心跳线程退出模块用于在TCP服务监听停止时,心跳线程退出运行。
根据本公开的实施例,数据处理装置还包括:第二设置模块和第二事件触发模块。
第二设置模块用于在心跳线程中设置第二退出事件;
第二事件触发模块用于在心跳线程退出运行之前,触发第二退出事件。
根据本公开的实施例,目标客户端包括气味嗅探仪设备。
根据本公开的实施例,还包括:
第三构建模块用于基于服务端的CPU内核数量构建工作线程,其中,工作线程的数量等于CPU内核数量与工作线程系数的乘积,以及冗余工作线程数量之和。
根据本公开的实施例,数据处理装置还可以包括:第三构建模块。
第三构建模块用于基于服务端的CPU内核数量构建工作线程,其中,工作线程的数量等于CPU内核数量与工作线程系数的乘积,以及冗余工作线程数量之和。
根据本公开的实施例,连接模块810、检测模块820、创建模块830、第一初始化模块840和退出模块850中的任意多个模块可以合并在一个模块中实现,或者其中的任意一个模块可以被拆分成多个模块。或者,这些模块中的一个或多个模块的至少部分功能可以与其他模块的至少部分功能相结合,并在一个模块中实现。根据本公开的实施例,连接模块810、检测模块820、创建模块830、第一初始化模块840和退出模块850中的至少一个可以至少被部分地实现为硬件电路,例如现场可编程门阵列(FPGA)、可编程逻辑阵列(PLA)、片上系统、基板上的系统、封装上的系统、专用集成电路(ASIC),或可以通过对电路进行集成或封装的任何其他的合理方式等硬件或固件来实现,或以软件、硬件以及固件三种实现方式中任意一种或以其中任意几种的适当组合来实现。或者,连接模块810、检测模块820、创建模块830、第一初始化模块840和退出模块850中的至少一个可以至少被部分地实现为计算机程序模块,当该计算机程序模块被运行时,可以执行相应的功能。
图9示意性示出了根据本公开实施例的适于实现数据处理方法的电子设备的方框图。
如图9所示,根据本公开实施例的电子设备900包括处理器901,其可以根据存储在只读存储器(ROM)902中的程序或者从存储部分908加载到随机访问存储器(RAM)903中的程序而执行各种适当的动作和处理。处理器901例如可以包括通用微处理器(例如CPU)、指令集处理器和/或相关芯片组和/或专用微处理器(例如,专用集成电路(ASIC))等等。处理器901还可以包括用于缓存用途的板载存储器。处理器901可以包括用于执行根据本公开实施例的方法流程的不同动作的单一处理单元或者是多个处理单元。
在RAM903中,存储有电子设备900操作所需的各种程序和数据。处理器901、ROM902以及RAM 903通过总线904彼此相连。处理器901通过执行ROM 902和/或RAM 903中的程序来执行根据本公开实施例的方法流程的各种操作。需要注意,所述程序也可以存储在除ROM 902和RAM 903以外的一个或多个存储器中。处理器901也可以通过执行存储在所述一个或多个存储器中的程序来执行根据本公开实施例的方法流程的各种操作。
根据本公开的实施例,电子设备900还可以包括输入/输出(I/O)接口905,输入/输出(I/O)接口905也连接至总线904。电子设备900还可以包括连接至I/O接口905的以下部件中的一项或多项:包括键盘、鼠标等的输入部分906;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分907;包括硬盘等的存储部分908;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分909。通信部分909经由诸如因特网的网络执行通信处理。驱动器910也根据需要连接至I/O接口905。可拆卸介质911,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器910上,以便于从其上读出的计算机程序根据需要被安装入存储部分908。
本公开还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中描述的设备/装置/系统中所包含的;也可以是单独存在,而未装配入该设备/装置/系统中。上述计算机可读存储介质承载有一个或者多个程序,当上述一个或者多个程序被执行时,实现根据本公开实施例的方法。
根据本公开的实施例,计算机可读存储介质可以是非易失性的计算机可读存储介质,例如可以包括但不限于:便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。例如,根据本公开的实施例,计算机可读存储介质可以包括上文描述的ROM 902和/或RAM 903和/或ROM 902和RAM 903以外的一个或多个存储器。
本公开的实施例还包括一种计算机程序产品,其包括计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。当计算机程序产品在计算机系统中运行时,该程序代码用于使计算机系统实现本公开实施例所提供的方法。
在该计算机程序被处理器901执行时执行本公开实施例的系统/装置中限定的上述功能。根据本公开的实施例,上文描述的系统、装置、模块、单元等可以通过计算机程序模块来实现。
在一种实施例中,该计算机程序可以依托于光存储器件、磁存储器件等有形存储介质。在另一种实施例中,该计算机程序也可以在网络介质上以信号的形式进行传输、分发,并通过通信部分909被下载和安装,和/或从可拆卸介质911被安装。该计算机程序包含的程序代码可以用任何适当的网络介质传输,包括但不限于:无线、有线等等,或者上述的任意合适的组合。
在这样的实施例中,该计算机程序可以通过通信部分909从网络上被下载和安装,和/或从可拆卸介质911被安装。在该计算机程序被处理器901执行时,执行本公开实施例的系统中限定的上述功能。根据本公开的实施例,上文描述的系统、设备、装置、模块、单元等可以通过计算机程序模块来实现。
根据本公开的实施例,可以以一种或多种程序设计语言的任意组合来编写用于执行本公开实施例提供的计算机程序的程序代码,具体地,可以利用高级过程和/或面向对象的编程语言、和/或汇编/机器语言来实施这些计算程序。程序设计语言包括但不限于诸如Java,C++,python,“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
本领域技术人员可以理解,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合或/或结合,即使这样的组合或结合没有明确记载于本公开中。特别地,在不脱离本公开精神和教导的情况下,本公开的各个实施例和/或权利要求中记载的特征可以进行多种组合和/或结合。所有这些组合和/或结合均落入本公开的范围。
以上对本公开的实施例进行了描述。但是,这些实施例仅仅是为了说明的目的,而并非为了限制本公开的范围。尽管在以上分别描述了各实施例,但是这并不意味着各个实施例中的措施不能有利地结合使用。本公开的范围由所附权利要求及其等同物限定。不脱离本公开的范围,本领域技术人员可以做出多种替代和修改,这些替代和修改都应落在本公开的范围之内。

Claims (18)

1.一种数据处理方法,包括:
响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与所述目标客户端的连接,其中,所述异步连接请求包括N个,N≥2;
利用工作线程检测所述完成端口的状态,得到状态检测结果;
在所述状态检测结果表征与所述目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,所述客户端管理对象用于接收来自所述客户端的数据,以及向所述客户端发送数据;
针对所述异步连接请求进行初始化,并向所述完成端口投递初始化后的异步连接请求,以便保证所述完成端口中保持N个所述异步连接请求;以及
在TCP服务监听停止时,所述工作线程退出运行,以便释放所述工作线程占用的完成端口资源。
2.根据权利要求1所述的方法,其中,所述客户端管理对象包括多个数据接收对象;
所述数据处理方法还包括:
向多个所述数据接收对象中的空闲数据接收对象投递目标接收请求,得到占用数据接收对象;
在所述状态检测结果表征接收到来自目标客户端的客户端数据包的情况下,利用所述占用数据接收对象接收所述客户端数据包;
将所述占用数据接收对象中的客户端数据包放入接收数据链表;
对所述占用数据接收对象进行初始化,得到新的空闲数据接收对象。
3.根据权利要求2所述的方法,还包括:
解析所述接收数据链表中的客户端数据包,确定所述客户端数据包的解析结果;
根据所述解析结果,对所述客户端数据包进行处理,得到回复数据链表;
删除所述接收数据链表中已经解析过的客户端数据包。
4.根据权利要求3所述的方法,其中,根据所述解析结果,对所述客户端数据包进行处理,得到回复数据链表包括:
在所述解析结果表征所述客户端数据包为心跳包的情况下,生成第一回复包;
在所述解析结果表征所述客户端数据包为设备命令信息包的情况下,更新所述客户端管理对象的设备标识信息,并生成第二回复包;
在所述解析结果表征所述客户端数据包为客户端回复数据包的情况下,触发客户端回复事件,生成第三回复包;
根据所述第一回复包、第二回复包和第三回复包,构建回复数据链表。
5.根据权利要求1所述的方法,其中,所述客户端管理对象包括多个数据发送对象;
所述数据处理方法还包括:
在所述状态检测结果表征发送目标数据的情况下,利用多个所述数据发送对象中的空闲数据发送对象投递目标发送请求,得到占用数据发送对象;
利用所述占用数据发送对象发送所述目标数据;
对所述占用数据对象初始化,得到新的空闲数据发送对象。
6.根据权利要求1所述的方法,还包括:
构建客户端管理链表,其中,所述客户端管理链表包括至少一个所述客户端管理对象;
利用心跳线程轮询所述客户端管理链表,确定所述客户端管理链表中每个客户端管理对象的连接空闲时长;
在所述客户端管理链表中的候选客户端管理对象的连接空闲时长大于预设空闲阈值的情况下,将所述候选客户端管理对象从所述客户端管理链表中删除,并关闭所述候选客户端管理对象,以便与所述候选客户端管理对象对应的目标客户端断开连接。
7.根据权利要求6所述的方法,还包括:
在所述状态检测结果表征与所述目标客户端连接异常的情况下,将所述目标客户端管理对象从所述客户端管理链表中删除,并关闭所述目标客户端管理对象,以便与所述目标客户端管理对象对应的目标客户端断开连接。
8.根据权利要求6或7所述的方法,其中,在将所述候选客户端管理对象或所述目标客户端管理对象从所述客户端管理链表中删除之前,所述方法还包括:
在断开客户端连接函数中,生成客户端退出对象;
将所述客户端退出对象添加到所述客户端管理链表;
在将所述候选客户端管理对象或所述目标客户端管理对象从所述客户端管理链表中删除之后,触发客户端操作事件,以便通知上层应用软件更新在线设备表。
9.根据权利要求1所述的方法,其中,响应于监听到客户端的连接请求,利用完成端口中的异步连接请求建立与所述客户端的连接还包括:
响应于监听到所述目标客户端的连接请求,利用所述完成端口中的异步连接请求,将所述目标客户端对应的目标套接字与所述完成端口绑定,以便与所述目标客户端建立连接。
10.根据权利要求1所述的方法,其中,在TCP服务监听停止时,所述工作线程退出运行包括:
在所述TCP服务监听停止前,利用所述完成端口向所述工作线程发送退出指令包;
响应于检测到所述退出指令包,所述工作线程退出运行;
其中,在所述工作线程退出运行之前,所述数据处理方法还包括:
在所述工作线程中设置第一退出事件;
在所述工作线程退出运行之前,触发所述第一退出事件。
11.根据权利要求6所述的方法,还包括:在所述TCP服务监听停止时,心跳线程退出运行。
12.根据权利要求11所述的方法,还包括:
在所述心跳线程中设置第二退出事件;
在所述心跳线程退出运行之前,触发所述第二退出事件。
13.根据权利要求1所述的方法,其中,
所述目标客户端包括气味嗅探仪设备。
14.根据权利要求1所述的方法,还包括:
基于所述服务端的CPU内核数量构建工作线程,其中,所述工作线程的数量等于所述CPU内核数量与工作线程系数的乘积,以及冗余工作线程数量之和。
15.一种数据处理装置,包括:
连接模块,用于响应于监听到目标客户端的连接请求,利用完成端口中的异步连接请求建立与所述目标客户端的连接,其中,所述异步连接请求包括N个,N≥2;
检测模块,用于利用工作线程检测所述完成端口的状态,得到状态检测结果;
创建模块,用于在所述状态检测结果表征与所述目标客户端的连接建立完成的情况下,创建客户端管理对象,其中,所述客户端管理对象用于接收来自所述客户端的数据,以及向所述客户端发送数据;
第一初始化模块,用于针对所述异步连接请求进行初始化,并向所述完成端口投递初始化后的异步连接请求,以便保证所述完成端口中保持N个所述异步连接请求;以及
退出模块,用于在TCP服务监听停止时,所述工作线程退出运行,以便释放所述工作线程占用的完成端口资源。
16.一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
其中,当所述一个或多个程序被所述一个或多个处理器执行时,使得所述一个或多个处理器执行根据权利要求1~14中任一项所述的方法。
17.一种计算机可读存储介质,其上存储有可执行指令,该指令被处理器执行时使处理器执行根据权利要求1~14中任一项所述的方法。
18.一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现根据权利要求1~14中任一项所述的方法。
CN202210777448.9A 2022-07-01 2022-07-01 数据处理方法、装置、设备及介质 Pending CN117376399A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210777448.9A CN117376399A (zh) 2022-07-01 2022-07-01 数据处理方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210777448.9A CN117376399A (zh) 2022-07-01 2022-07-01 数据处理方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN117376399A true CN117376399A (zh) 2024-01-09

Family

ID=89389854

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210777448.9A Pending CN117376399A (zh) 2022-07-01 2022-07-01 数据处理方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN117376399A (zh)

Similar Documents

Publication Publication Date Title
CN109905259A (zh) 通信连接维持方法、系统和相关设备
CN113900834B (zh) 基于物联网技术的数据处理方法、装置、设备及存储介质
CN113590437B (zh) 一种告警信息处理方法、装置、设备和介质
CN114201278A (zh) 任务处理方法、任务处理装置、电子设备以及存储介质
CN113382056A (zh) 数据上报方法、装置、设备、存储介质及系统
CN115996197A (zh) 一种流量拥塞前置的分布式计算流量仿真系统与方法
CN113254274A (zh) 消息处理方法、装置、存储介质以及服务器
CN117376399A (zh) 数据处理方法、装置、设备及介质
CN116260747A (zh) 终端测试设备的监测方法、装置及电子设备
CN115865734A (zh) 一种故障检测方法、数据生成方法、装置、设备及介质
CN115499501A (zh) 消息推送方法、系统、服务网关及存储介质
CN113656239A (zh) 针对中间件的监控方法、装置及计算机程序产品
CN111327511B (zh) 即时通讯方法、系统、终端设备与存储介质
CN112925623A (zh) 任务处理方法、装置、电子设备和介质
CN116760741B (zh) 一种数据状态监控方法、装置、设备及介质
CN115396523A (zh) 物联网数据处理方法、装置、设备、介质及物联网软网关
CN113220420B (zh) 服务监控方法、装置、设备、存储介质及计算机程序产品
CN114328549B (zh) 数据处理方法、装置、电子设备及存储介质
CN114844910B (zh) 分布式存储系统的数据传输方法、系统、设备及介质
CN113992690A (zh) 消息传递方法、装置、设备和存储介质
CN115086263A (zh) Ios终端的im消息发送方法、系统、存储介质、计算机设备
CN115757029A (zh) 数据处理方法、装置、设备和存储介质
CN115168050A (zh) 基于分布式监控代理的控制方法、装置、设备及存储介质
CN113783769A (zh) 自动驾驶中传输消息的方法、装置及中继设备
CN116319420A (zh) 网络探测方法、装置、电子设备、存储介质及程序产品

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination