本发明涉及互联网
技术领域:
:,尤其涉及udp数据包处理方法、电子设备及介质。
背景技术:
::在dht(distributedhashtable,分布式哈希表)网络里,基于udp协议(userdatagramprotocol,用户数据报协议)进行信令传输。一个拥有公网地址的dht节点可以作为代理节点,而对于没有公网地址的dht节点,则不能被直接访问和传输信令,这类节点被称作为内网节点。内网节点需要通过代理节点与公网进行通信。一个代理节点可以同时挂载多个内网节点,也可以同时接收来自其他dht节点发送的信令包,这些信令包就是udp数据包。目前,位于代理节点的udp服务器在收到了信令包后,处理数据的过程耗时较长。并且,在上述数据处理的过程中,新的udp数据包很可能很快到,但由于未被及时读取,将导致接收udp数据包的缓冲区被填满,从而产生严重的udp丢包现象,性能不佳,无法满足dht网络里udp高并发的应用要求。技术实现要素:本发明的主要目的在于提供udp数据包处理方法、电子设备及介质,能够降低dht网络中udp数据包的丢包率,并有效提高了dht网络中对udp数据包的并行处理能力,进而提高了dht网络中代理节点挂载内网节点的能力。为实现上述目的,本发明提供一种udp数据包处理方法,所述方法包括:构建队列缓冲区;创建读取线程及处理线程,其中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包;当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。根据本发明优选实施例,所述读取线程持续读取udp数据包至所述队列缓冲区包括:当读取到有效的udp数据包时,所述读取线程判断所述队列缓冲区中数据的队列长度,得到判断结果;所述读取线程根据所述判断结果处理读取到的udp数据包。根据本发明优选实施例,所述根据所述判断结果处理读取到的udp数据包包括:当所述队列长度小于预设阈值时,所述读取线程将所述读取到的udp数据包添加到所述队列缓冲区;或者当所述队列长度达到所述预设阈值时,所述读取线程丢弃所述读取到的udp数据包。根据本发明优选实施例,所述处理线程持续处理所述队列缓冲区中的udp数据包包括:所述处理线程检测所述队列缓冲区是否为空队列;当检测到所述队列缓冲区为非空队列时,所述处理线程确定所述队列缓冲区的队列头,获取所述队列头对应的udp数据包,并处理获取的udp数据包;或者当检测到所述队列缓冲区为空队列时,所述处理线程等待所述队列缓冲区为非空队列。根据本发明优选实施例,所述处理线程检测所述队列缓冲区是否为空队列包括:当所述读取线程添加udp数据包至所述队列缓冲区时,向所述处理线程发出提示信息;当接收到所述提示信息时,所述处理线程确定所述队列缓冲区为非空队列。根据本发明优选实施例,所述处理线程包括至少一个子线程。为实现上述目的,本发明进一步提供一种电子设备,所述电子设备包括:存储器,存储至少一个指令;及处理器,执行所述存储器中存储的指令以实现所述udp数据包处理方法。优选地,所述电子设备为组成内容分发网络或者区块链网络的节点。为实现上述目的,本发明进一步提供一种udp数据包处理系统,所述系统包括:构建单元,用于构建队列缓冲区;创建单元,用于创建读取线程及处理线程,其中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包;启动单元,用于当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。根据本发明优选实施例,所述系统还包括:读取单元,用于持续读取udp数据包至所述队列缓冲区,具体包括:当读取到有效的udp数据包时,判断所述队列缓冲区中数据的队列长度,得到判断结果;根据所述判断结果处理读取到的udp数据包。根据本发明优选实施例,所述读取单元根据所述判断结果处理读取到的udp数据包包括:当所述队列长度小于预设阈值时,将所述读取到的udp数据包添加到所述队列缓冲区;或者当所述队列长度达到所述预设阈值时,丢弃所述读取到的udp数据包。根据本发明优选实施例,所述系统还包括:处理单元,用于持续处理所述队列缓冲区中的udp数据包,具体包括:检测所述队列缓冲区是否为空队列;当检测到所述队列缓冲区为非空队列时,获取所述队列缓冲区的队列头对应的udp数据包,并处理获取的udp数据包;或者当检测到所述队列缓冲区为空队列时,等待所述队列缓冲区为非空队列。根据本发明优选实施例,所述处理单元检测所述队列缓冲区是否为空队列包括:当所述读取单元添加udp数据包至所述队列缓冲区时,向所述处理单元发出通知;当接收到所述提示信息时,确定所述队列缓冲区为非空队列。根据本发明优选实施例,所述处理线程包括至少一个子线程。综上所述,本发明能够构建队列缓冲区,并创建读取线程及处理线程,实现了多个线程对队列缓冲区的共享,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包,进而实现了读取udp数据包流程与处理udp数据包流程的相互独立,当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程,进而降低dht网络中udp数据包的丢包率,并有效提高了dht网络中对udp数据包的并行处理能力,进而提高了dht网络中代理节点挂载内网节点的能力。附图说明图1为本发明一实施例的流程示意图;图2为本发明一实施例揭露的电子设备的内部结构示意图;图3为本发明udp数据包处理系统的功能模块示意图。主要元件符号说明电子设备1存储器12处理器13udp数据包处理系统11构建单元110创建单元111启动单元112具体实施方式为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。本发明提供一种udp数据包处理方法。参照图1,为本发明一实施例的流程示意图。根据不同的需求,该流程示意图中步骤的顺序可以改变,某些步骤可以省略。所述udp数据包处理方法应用于一个或者多个电子设备中,所述电子设备是一种能够按照事先设定或存储的指令,自动进行数值计算和/或信息处理的设备,所述电子设备的硬件设备包括但不限于微处理器、专用集成电路(applicationspecificintegratedcircuit,asic)、可编程门阵列(field-programmablegatearray,fpga)、数字处理器(digitalsignalprocessor,dsp)、嵌入式设备等。所述电子设备可以是任何一种可与用户进行人机交互的电子产品,例如,个人计算机、平板电脑、智能手机、个人数字助理(personaldigitalassistant,pda)、游戏机、交互式网络电视(internetprotocoltelevision,iptv)、智能式穿戴式设备等。所述电子设备还可以包括网络设备和/或用户设备。其中,所述网络设备包括,但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(cloudcomputing)的由大量主机或网络服务器构成的云。所述电子设备所处的网络包括但不限于互联网、广域网、城域网、局域网、虚拟专用网络(virtualprivatenetwork,vpn)等。在一实施例中,该方法包括:s10,构建队列缓冲区。在本发明的至少一个实施例中,所述电子设备可以作为dht(distributedhashtable,分布式哈希表)网络中的代理节点,也就是说,所述电子设备相当于位于代理节点的udp服务器,用于读取udp数据包,并处理udp数据包。其中,通过所述代理节点,能够使内网节点与dht节点之间互相通信。所述dht节点在向所述代理节点发出代理请求时,向所述代理节点发送所述udp数据包,进一步地,所述代理节点将所述udp数据包转发至所述内网节点。所述udp数据包可以包括多种类型,例如:所述udp数据包可以被转发至所述内网节点,也可以用于心跳检测,还可以用于探测连接时间等。在所述udp数据包被处理后,从当前的存储缓冲区中删除该udp数据包。目前,udp(userdatagramprotocol,用户数据报协议)数据包的存储缓冲区在存储数据时,往往由于数据包没有被及时处理,导致缓冲区被填满,进而产生udp丢包现象。在本发明的至少一个实施例中,所述电子设备构建所述队列缓冲区,以解决上述丢包问题。具体地,为了避免占用过多的内存,影响系统的正常运行,所述电子设备还可以为所述队列缓冲区配置存储上限。需要说明的是,所述电子设备可以根据系统性能为所述队列缓冲区配置存储上限。进一步地,可以按照读取的先后顺序在所述队列缓冲区中依次存储udp数据包,并且,所述队列缓冲区中的数据在被处理时,可以遵循先入先出的原则,通过有序的数据存储及先入先出的处理模式,能够有效避免产生udp丢包。s11,创建读取线程及处理线程。在本发明的至少一个实施例中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包。也就是说,所述读取线程一直处于读取状态,无需等待所述处理线程处理完数据;而只要所述队列缓冲区中有udp数据包,所述处理线程也一直处于处理状态,无需等待所述读取线程结束,因此,所述读取线程与所述处理线程一直处于并行工作的状态,二者共用所述队列缓冲区,一方的执行并不影响另一方的正常工作。在本发明的至少一个实施例中,所述处理线程可以包括至少一个子线程。可以理解的是,所述读取线程是与网络接口的数量相关的,因此,通常为一个。相比较而言,所述处理线程则可以包括至少一个子线程。也就使说,在本案中,不仅所述读取线程与所述处理线程是并行处理的,所述处理线程中的所述至少一个子线程也可以并行处理,进一步提高了对所述udp数据包的处理效率。可以理解的是,对udp数据包的读取速度一般快于对udp数据包的处理速度,因此,采用至少一个子线程并行处理,还能够有效减少对udp数据包的丢弃。在本发明的至少一个实施例中,所述读取线程持续读取udp数据包至所述队列缓冲区包括:当读取到有效的udp数据包时,所述读取线程判断所述队列缓冲区中数据的队列长度,得到判断结果,所述读取线程根据所述判断结果处理读取到的udp数据包。具体地,所述读取线程可以根据预先定义的协议判断所述udp数据包是否有效。例如:所述读取线程可以检测所述udp数据包的字节数,并同时确定所述udp数据包的类型,当所述udp数据包的字节数不小于配置字节数,且所述udp数据包为指定类型时,所述读取线程确定所述udp数据包有效,否则无效。在本发明的至少一个实施例中,所述读取线程根据所述判断结果处理读取到的udp数据包包括:(1)当所述队列长度小于预设阈值时,所述读取线程将所述读取到的udp数据包添加到所述队列缓冲区。具体地,为了更好的遵循先入先出的原则,所述读取线程可以将所述udp数据包添加到所述队列缓冲区的队列尾部,以避免造成udp数据包的重复或者遗漏。例如:所述读取线程在读到一个有效的udp数据包以后,立即将所述有效的udp数据包追加到所述队列缓冲区中的队列尾部,这个过程是针对系统内存的操作,和处理数据时采用i/o(input/output,输入/输出)操作相比,几乎没有耗时。之后,所述读取线程立即进行下一次对udp数据包的读取操作,通过连续持续的执行上述流程,进而能够达到以最快的速度去持续地读取udp数据包的目的。可以理解的是,在所述读取线程将所述读取到的udp数据包添加到所述队列缓冲区时,是在系统内存中执行的,因此,相较于i/o操作,几乎没有耗时,进一步有效提高了udp数据包的读取效率,进而实现对udp数据包的持续读取。(2)当所述队列长度达到所述预设阈值时,所述读取线程丢弃所述读取到的udp数据包。可以理解的是,越早被读取到所述队列缓冲区中的udp数据包越有可能被先处理,因此,通过丢弃本次读取到的udp数据包,能够避免所述队列缓冲区中正在被处理的udp数据包被误丢弃,进而能够避免对udp数据包的处理造成干扰。另外,还能避免由于所述处理线程处理速度过慢,而所述读取线程读取速度过快导致的队列无限扩大,甚至耗尽系统内存的现象发生,使系统能够正常运行。在本发明的至少一个实施例中,所述预设阈值即表征了所述队列缓冲区的存储上限,因此,所述预设阈值的配置方式可以参见上文对所述队列缓冲区的存储上限的配置方式。在本发明的至少一个实施例中,所述处理线程持续处理所述队列缓冲区中的udp数据包包括:所述处理线程检测所述队列缓冲区是否为空队列,进一步地:(1)当检测到所述队列缓冲区为非空队列时,所述处理线程确定所述队列缓冲区的队列头,获取所述队列头对应的udp数据包,并处理获取的udp数据包。通过上述实施方式,所述处理线程能够以先入先出的原则,持续地处理所述队列缓冲区中的udp数据包。(2)当检测到所述队列缓冲区为空队列时,所述处理线程等待所述队列缓冲区为非空队列。可以理解的是,只有当所述队列缓冲区中有udp数据包时,所述处理线程才能进行处理,因此,当检测到所述队列缓冲区为空队列时,所述处理线程等待所述队列缓冲区为非空队列。进一步地,所述处理线程检测所述队列缓冲区是否为空队列包括:当所述读取线程添加udp数据包至所述队列缓冲区时,向所述处理线程发出提示信息,当接收到所述提示信息时,所述处理线程确定所述队列缓冲区为非空队列。通过上述实施方式,当所述读取线程添加udp数据包至所述队列缓冲区时,直接由所述读取线程向所述处理线程发出提示信息,避免由于一直处于监控状态而使cpu(centralprocessingunit,中央处理器)的消耗过高,进而造成系统负担。在本发明的至少一个实施例中,实现了多个线程对队列缓冲区的共享,同时实现了读取udp数据包流程与处理udp数据包流程的相互独立。因此,在dht网络中的代理节点作为udp服务器进行网络服务时,能够充分考虑到通过i/o操作处理udp数据包带来的消极影响(即处理速度较慢,且耗时较长),并能够同时考虑到大规模dht节点并发向作为代理节点的udp服务器发送dht信令时带来的丢包率。不仅有效降低了udp丢包率,还提高了dht网络系统并发处理的能力,进一步有效提高了dht网络中代理节点挂载内网节点的能力。s12,当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。在本发明的至少一个实施例中,所述udp数据包可以是udp套接字(socket)的形式,所述udp套接字是一个抽象层,应用程序可以通过所述udp套接字发送或者接收数据,并且,通过所述udp套接字,可以进行像对文件一样的打开、读写以及关闭等操作。因此,当检测到所述udp数据包完成初始化时,说明所述udp数据包可以被执行读取或者处理操作,则所述电子设备进一步启动所述读取线程及所述处理线程。在本发明的至少一个实施例中,所述电子设备可以同时启动所述读取线程及所述处理线程,以避免发生对所述udp数据包的延迟处理。当然,在其他实施例中,所述电子设备还可以在检测到所述读取线程读取到了第一个有效的udp数据包至所述队列缓冲区后再启动所述处理线程,本发明不限制。综上所述,本发明能够构建队列缓冲区,并创建读取线程及处理线程,实现了多个线程对队列缓冲区的共享,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包,进而实现了读取udp数据包流程与处理udp数据包流程的相互独立,当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程,进而降低dht网络中udp数据包的丢包率,并有效提高了dht网络中对udp数据包的并行处理能力,进而提高了dht网络中代理节点挂载内网节点的能力。参见图2,在本实施例中,所述电子设备1可以是组成内容分发网络或者区块链网络的节点。所述电子设备1可以包括存储器12、处理器13和总线,还可以包括存储在所述存储器12中并可在所述处理器13上运行的计算机程序,例如udp数据包处理程序。本领域技术人员可以理解,所述示意图仅仅是电子设备1的示例,并不构成对电子设备1的限定,所述电子设备1既可以是总线型结构,也可以是星形结构,所述电子设备1还可以包括比图示更多或更少的其他硬件或者软件,或者不同的部件布置,例如所述电子设备1还可以包括输入输出设备、网络接入设备等。需要说明的是,所述电子设备1仅为举例,其他现有的或今后可能出现的电子产品如可适应于本发明,也应包含在本发明的保护范围以内,并以引用方式包含于此。其中,存储器12至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如:sd或dx存储器等)、磁性存储器、磁盘、光盘等。存储器12在一些实施例中可以是电子设备1的内部存储单元,例如该电子设备1的移动硬盘。存储器12在另一些实施例中也可以是电子设备1的外部存储设备,例如电子设备1上配备的插接式移动硬盘、智能存储卡(smartmediacard,smc)、安全数字(securedigital,sd)卡、闪存卡(flashcard)等。进一步地,存储器12还可以既包括电子设备1的内部存储单元也包括外部存储设备。存储器12不仅可以用于存储安装于电子设备1的应用软件及各类数据,例如udp数据包处理程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。处理器13在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(centralprocessingunit,cpu)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。处理器13是所述电子设备1的控制核心(controlunit),利用各种接口和线路连接整个电子设备1的各个部件,通过运行或执行存储在所述存储器12内的程序或者模块(例如执行udp数据包处理程序等),以及调用存储在所述存储器12内的数据,以执行电子设备1的各种功能和处理数据。所述处理器13执行所述电子设备1的操作系统以及安装的各类应用程序。所述处理器13执行所述应用程序以实现上述各个udp数据包处理方法实施例中的步骤,例如图1所示的步骤s10、s11、s12。或者,所述处理器13执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如:构建队列缓冲区;创建读取线程及处理线程,其中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包;当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或者多个模块/单元被存储在所述存储器12中,并由所述处理器13执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述电子设备1中的执行过程。例如,所述计算机程序可以被分割成构建单元110、创建单元111、启动单元112。上述以软件功能模块的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能模块存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机、计算机设备,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的部分。所述电子设备1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指示相关的硬件设备来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)。总线可以是外设部件互连标准(peripheralcomponentinterconnect,简称pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,简称eisa)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,在图2中仅用一根箭头表示,但并不表示仅有一根总线或一种类型的总线。所述总线被设置为实现所述存储器12以及至少一个处理器13等之间的连接通信。尽管未示出,所述电子设备1还可以包括给各个部件供电的电源(比如电池),优选地,电源可以通过电源管理装置与所述至少一个处理器13逻辑相连,从而通过电源管理装置实现充电管理、放电管理、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备1还可以包括多种传感器、蓝牙模块、wi-fi模块等,在此不再赘述。进一步地,所述电子设备1还可以包括网络接口,可选地,所述网络接口可以包括有线接口和/或无线接口(如wi-fi接口、蓝牙接口等),通常用于在该电子设备1与其他电子设备之间建立通信连接。可选地,该电子设备1还可以包括用户接口,用户接口可以是显示器(display)、输入单元(比如键盘(keyboard)),可选地,用户接口还可以是标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是led显示器、液晶显示器、触控式液晶显示器以及oled(organiclight-emittingdiode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的用户界面。应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。图2仅示出了具有组件12-13的电子设备1,本领域技术人员可以理解的是,图2示出的结构并不构成对所述电子设备1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。结合图1,所述电子设备1中的所述存储器12存储多个指令以实现一种udp数据包处理方法,所述处理器13可执行所述多个指令从而实现:构建队列缓冲区;创建读取线程及处理线程,其中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包;当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。具体地,所述处理器13对上述指令的具体实现方法可参考图1及图2对应实施例中相关步骤的描述,在此不赘述。参照图3,为本发明udp数据包处理系统的功能模块示意图。所述udp数据包处理系统11包括构建单元110、创建单元111、启动单元112。本发明所称的模块/单元是指一种能够被处理器13所执行,并且能够完成固定功能的一系列计算机程序段,其存储在存储器12中。在本实施例中,关于各模块/单元的功能将在后续的实施例中详述。构建单元110构建队列缓冲区。在本发明的至少一个实施例中,电子设备可以作为dht(distributedhashtable,分布式哈希表)网络中的代理节点,也就是说,所述电子设备相当于位于代理节点的udp服务器,用于读取udp数据包,并处理udp数据包。其中,通过所述代理节点,能够使内网节点与dht节点之间互相通信。所述dht节点在向所述代理节点发出代理请求时,向所述代理节点发送所述udp数据包,进一步地,所述代理节点将所述udp数据包转发至所述内网节点。所述udp数据包可以包括多种类型,例如:所述udp数据包可以被转发至所述内网节点,也可以用于心跳检测,还可以用于探测连接时间等。在所述udp数据包被处理后,从当前的存储缓冲区中删除该udp数据包。目前,udp(userdatagramprotocol,用户数据报协议)数据包的存储缓冲区在存储数据时,往往由于数据包没有被及时处理,导致缓冲区被填满,进而产生udp丢包现象。在本发明的至少一个实施例中,所述构建单元110构建所述队列缓冲区,以解决上述丢包问题。具体地,为了避免占用过多的内存,影响系统的正常运行,所述构建单元110还可以为所述队列缓冲区配置存储上限。需要说明的是,所述构建单元110可以根据系统性能为所述队列缓冲区配置存储上限。进一步地,可以按照读取的先后顺序在所述队列缓冲区中依次存储udp数据包,并且,所述队列缓冲区中的数据在被处理时,可以遵循先入先出的原则,通过有序的数据存储及先入先出的处理模式,能够有效避免产生udp丢包。创建单元111创建读取线程及处理线程。在本发明的至少一个实施例中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包。也就是说,所述读取线程一直处于读取状态,无需等待所述处理线程处理完数据;而只要所述队列缓冲区中有udp数据包,所述处理线程也一直处于处理状态,无需等待所述读取线程结束,因此,所述读取线程与所述处理线程一直处于并行工作的状态,二者共用所述队列缓冲区,一方的执行并不影响另一方的正常工作。在本发明的至少一个实施例中,所述处理线程可以包括至少一个子线程。可以理解的是,所述读取线程是与网络接口的数量相关的,因此,通常为一个。相比较而言,所述处理线程则可以包括至少一个子线程。也就使说,在本案中,不仅所述读取线程与所述处理线程是并行处理的,所述处理线程中的所述至少一个子线程也可以并行处理,进一步提高了对所述udp数据包的处理效率。可以理解的是,对udp数据包的读取速度一般快于对udp数据包的处理速度,因此,采用至少一个子线程并行处理,还能够有效减少对udp数据包的丢弃。在本发明的至少一个实施例中,所述读取线程持续读取udp数据包至所述队列缓冲区包括:当读取到有效的udp数据包时,所述读取线程判断所述队列缓冲区中数据的队列长度,得到判断结果,所述读取线程根据所述判断结果处理读取到的udp数据包。具体地,所述读取线程可以根据预先定义的协议判断所述udp数据包是否有效。例如:所述读取线程可以检测所述udp数据包的字节数,并同时确定所述udp数据包的类型,当所述udp数据包的字节数不小于配置字节数,且所述udp数据包为指定类型时,所述读取线程确定所述udp数据包有效,否则无效。在本发明的至少一个实施例中,所述读取线程根据所述判断结果处理读取到的udp数据包包括:(1)当所述队列长度小于预设阈值时,所述读取线程将所述读取到的udp数据包添加到所述队列缓冲区。具体地,为了更好的遵循先入先出的原则,所述读取线程可以将所述udp数据包添加到所述队列缓冲区的队列尾部,以避免造成udp数据包的重复或者遗漏。例如:所述读取线程在读到一个有效的udp数据包以后,立即将所述有效的udp数据包追加到所述队列缓冲区中的队列尾部,这个过程是针对系统内存的操作,和处理数据时采用i/o(input/output,输入/输出)操作相比,几乎没有耗时。之后,所述读取线程立即进行下一次对udp数据包的读取操作,通过连续持续的执行上述流程,进而能够达到以最快的速度去持续地读取udp数据包的目的。可以理解的是,在所述读取线程将所述读取到的udp数据包添加到所述队列缓冲区时,是在系统内存中执行的,因此,相较于i/o操作,几乎没有耗时,进一步有效提高了udp数据包的读取效率,进而实现对udp数据包的持续读取。(2)当所述队列长度达到所述预设阈值时,所述读取线程丢弃所述读取到的udp数据包。可以理解的是,越早被读取到所述队列缓冲区中的udp数据包越有可能被先处理,因此,通过丢弃本次读取到的udp数据包,能够避免所述队列缓冲区中正在被处理的udp数据包被误丢弃,进而能够避免对udp数据包的处理造成干扰。另外,还能避免由于所述处理线程处理速度过慢,而所述读取线程读取速度过快导致的队列无限扩大,甚至耗尽系统内存的现象发生,使系统能够正常运行。在本发明的至少一个实施例中,所述预设阈值即表征了所述队列缓冲区的存储上限,因此,所述预设阈值的配置方式可以参见上文对所述队列缓冲区的存储上限的配置方式。在本发明的至少一个实施例中,所述处理线程持续处理所述队列缓冲区中的udp数据包包括:所述处理线程检测所述队列缓冲区是否为空队列,进一步地:(1)当检测到所述队列缓冲区为非空队列时,所述处理线程确定所述队列缓冲区的队列头,获取所述队列头对应的udp数据包,并处理获取的udp数据包。通过上述实施方式,所述处理线程能够以先入先出的原则,持续地处理所述队列缓冲区中的udp数据包。(2)当检测到所述队列缓冲区为空队列时,所述处理线程等待所述队列缓冲区为非空队列。可以理解的是,只有当所述队列缓冲区中有udp数据包时,所述处理线程才能进行处理,因此,当检测到所述队列缓冲区为空队列时,所述处理线程等待所述队列缓冲区为非空队列。进一步地,检测所述队列缓冲区是否为空队列包括:当所述读取线程添加udp数据包至所述队列缓冲区时,所述读取线程向所述处理线程发出提示信息,当接收到所述提示信息时,所述处理线程确定所述队列缓冲区为非空队列。通过上述实施方式,当所述读取线程添加udp数据包至所述队列缓冲区时,直接由所述读取线程向所述处理线程发出提示信息,避免由于一直处于监控状态而使cpu(centralprocessingunit,中央处理器)的消耗过高,进而造成系统负担。在本发明的至少一个实施例中,实现了多个线程对队列缓冲区的共享,同时实现了读取udp数据包流程与处理udp数据包流程的相互独立。因此,在dht网络中的代理节点作为udp服务器进行网络服务时,能够充分考虑到通过i/o操作处理udp数据包带来的消极影响(即处理速度较慢,且耗时较长),并能够同时考虑到大规模dht节点并发向作为代理节点的udp服务器发送dht信令时带来的丢包率。不仅有效降低了udp丢包率,还提高了dht网络系统并发处理的能力,进一步有效提高了dht网络中代理节点挂载内网节点的能力。当检测到存在udp数据包完成初始化时,启动单元112启动所述读取线程及所述处理线程。在本发明的至少一个实施例中,所述udp数据包可以是udp套接字(socket)的形式,所述udp套接字是一个抽象层,应用程序可以通过所述udp套接字发送或者接收数据,并且,通过所述udp套接字,可以进行像对文件一样的打开、读写以及关闭等操作。因此,当检测到所述udp数据包完成初始化时,说明所述udp数据包可以被执行读取或者处理操作,则所述启动单元112进一步启动所述读取线程及所述处理线程。在本发明的至少一个实施例中,所述启动单元112可以同时启动所述读取线程及所述处理线程,以避免发生对所述udp数据包的延迟处理。当然,在其他实施例中,所述启动单元112还可以在检测到所述读取线程读取到了第一个有效的udp数据包至所述队列缓冲区后再启动所述处理线程,本发明不限制。综上所述,本发明能够构建队列缓冲区,并创建读取线程及处理线程,实现了多个线程对队列缓冲区的共享,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包,进而实现了读取udp数据包流程与处理udp数据包流程的相互独立,当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程,进而降低dht网络中udp数据包的丢包率,并有效提高了dht网络中对udp数据包的并行处理能力,进而提高了dht网络中代理节点挂载内网节点的能力。在上述实施例中,可以全部或部分地通过软件、硬件设备、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、移动硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态移动硬盘solidstatedisk(ssd))等。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件设备的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动移动硬盘、只读存储器(rom,read-onlymemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。并且本文中的术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的
技术领域:
:,均同理包括在本发明的专利保护范围内。当前第1页1 2 3 当前第1页1 2 3 
技术特征:1.一种udp数据包处理方法,其特征在于,所述方法包括:
构建队列缓冲区;
创建读取线程及处理线程,其中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包;
当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。
2.如权利要求1所述的udp数据包处理方法,其特征在于,所述读取线程持续读取udp数据包至所述队列缓冲区包括:
当读取到有效的udp数据包时,所述读取线程判断所述队列缓冲区中数据的队列长度,得到判断结果;
所述读取线程根据所述判断结果处理读取到的udp数据包。
3.如权利要求2所述的udp数据包处理方法,其特征在于,所述根据所述判断结果处理读取到的udp数据包包括:
当所述队列长度小于预设阈值时,所述读取线程将所述读取到的udp数据包添加到所述队列缓冲区;或者
当所述队列长度达到所述预设阈值时,所述读取线程丢弃所述读取到的udp数据包。
4.如权利要求1所述的udp数据包处理方法,其特征在于,所述处理线程持续处理所述队列缓冲区中的udp数据包包括:
所述处理线程检测所述队列缓冲区是否为空队列;
当检测到所述队列缓冲区为非空队列时,所述处理线程确定所述队列缓冲区的队列头,获取所述队列头对应的udp数据包,并处理获取的udp数据包;或者
当检测到所述队列缓冲区为空队列时,所述处理线程等待所述队列缓冲区为非空队列。
5.如权利要求4所述的udp数据包处理方法,其特征在于,所述处理线程检测所述队列缓冲区是否为空队列包括:
当所述读取线程添加udp数据包至所述队列缓冲区时,向所述处理线程发出提示信息;
当接收到所述提示信息时,所述处理线程确定所述队列缓冲区为非空队列。
6.如权利要求1-5中任意一项所述的udp数据包处理方法,其特征在于,所述处理线程包括至少一个子线程。
7.一种电子设备,其特征在于,所述电子设备包括:
存储器,存储至少一个指令;及
处理器,执行所述存储器中存储的指令以实现如权利要求1-6中任意一项所述的udp数据包处理方法。
8.根据权利要求7所述的电子设备,其特征在于,所述电子设备为组成内容分发网络或者区块链网络的节点。
9.一种udp数据包处理系统,其特征在于,所述系统包括:
构建单元,用于构建队列缓冲区;
创建单元,用于创建读取线程及处理线程,其中,所述读取线程用于持续读取udp数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的udp数据包;
启动单元,用于当检测到存在udp数据包完成初始化时,启动所述读取线程及所述处理线程。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有udp数据包处理程序,所述udp数据包处理程序可被一个或者多个处理器执行,以实现如权利要求1-6中任意一项所述的udp数据包处理方法。
技术总结本发明提供了一种UDP数据包处理方法、电子设备及介质,所述方法包括:构建队列缓冲区;创建读取线程及处理线程,其中,所述读取线程用于持续读取UDP数据包至所述队列缓冲区,所述处理线程用于持续处理所述队列缓冲区中的UDP数据包;当检测到存在UDP数据包完成初始化时,启动所述读取线程及所述处理线程。本发明能够降低DHT网络中UDP数据包的丢包率,并有效提高了DHT网络中对UDP数据包的并行处理能力,进而提高了DHT网络中代理节点挂载内网节点的能力。
技术研发人员:刘振君
受保护的技术使用者:深圳市网心科技有限公司
技术研发日:2020.01.15
技术公布日:2020.06.09