一种目录查询方法、系统及电子设备和存储介质与流程

文档序号:18189198发布日期:2019-07-17 05:30阅读:133来源:国知局
一种目录查询方法、系统及电子设备和存储介质与流程

本申请涉及计算机技术领域,更具体地说,涉及一种目录查询方法、系统及一种电子设备和一种计算机可读存储介质。



背景技术:

smb是一个网络文件共享协议,它允许应用程序和终端用户从远端的文件服务器访问文件资源。通过smb协议,客户端应用程序可以在各种网络环境下读、写服务器上的文件,以及对服务器程序提出服务请求。

客户端与服务器连接成功后,可以发送smb命令到服务器上,从而客户端能够访问共享目录、打开文件、读写文件,以及一切在文件系统上能做的所有事情。在smb协议中当客户端打开一个目录时,需要展示出目录中所有的目录项,以及各个目录项的元数据属性信息。服务器收到查询目录请求后将打开这个目录,逐个读取这个目录下的目录项和每个目录项的元数据,然后分批次格式化打包返回给客户端。由于读取目录项和读取目录项元数据是串行的,当遇到一个目录项超过10万的超大目录时,客户端完全打开这个目录非常耗时,这极大的影响了用户体验。

因此,如何提高目录查询速度是本领域技术人员需要解决的技术问题。



技术实现要素:

本申请的目的在于提供一种目录查询方法、系统及一种电子设备和一种计算机可读存储介质,提高了目录查询速度。

为实现上述目的,本申请提供了一种目录查询方法,包括:

当接收到目标目录的查询请求时,利用线程池中的主线程读取所述目标目录中的每个目录项;

利用所述线程池中除所述主线程之外的空闲线程读取每个所述目录项的元数据;

根据所有所述目录项和所有所述元数据构建数据包,并返回所述数据包。

其中,利用所述线程池中除所述主线程之外的空闲线程读取每个所述目录项的元数据,包括:

s1:判断当前目录项是否需要展示元数据;若是,则进入s2,若否,则进入s3;

s2:利用所述线程池中除所述主线程之外的空闲线程读取所述当前目录项的元数据,并进入s3;

s3:判断是否存在下一个目录项;若是,则将下一个目录项作为所述当前目录项,并重新进入s1;若否,则执行所述根据所有所述目录项和所有所述元数据构建数据包,并返回所述数据包的步骤。

其中,所述元数据包括所述目录项的文件大小、创建时间和文件权限中的任一项或任几项的组合。

其中,根据所有所述目录项和所有所述元数据构建数据包,包括:

根据所有所述目录项构建所述数据包,并通过回调函数将所有所述目录项的元数据按照预设格式添加至所述数据包中。

为实现上述目的,本申请提供了一种目录查询系统,包括:

第一读取模块,用于当接收到目标目录的查询请求时,利用线程池中的主线程读取所述目标目录中的每个目录项;

第二读取模块,用于利用所述线程池中除所述主线程之外的空闲线程读取每个所述目录项的元数据;

返回模块,用于根据所有所述目录项和所有所述元数据构建数据包,并返回所述数据包。

其中,所述第二读取模块包括:

第一判断单元,用于判断当前目录项是否需要展示元数据;若是,则启动读取单元的工作流程,若否,则启动第二判断单元的工作流程;

所述读取单元,用于利用所述线程池中除所述主线程之外的空闲线程读取所述当前目录项的元数据,并启动所述第二判断单元的工作流程;

所述第二判断单元,用于判断是否存在下一个目录项;若是,则将下一个目录项作为所述当前目录项,并重新启动所述第一判断单元的工作流程;若否,则启动所述返回模块的工作流程。

其中,所述元数据包括所述目录项的文件大小、创建时间和文件权限中的任一项或任几项的组合。

其中,所述返回模块具体为根据所有所述目录项构建所述数据包,通过回调函数将所有所述目录项的元数据按照预设格式添加至所述数据包中,并返回所述数据包的模块。

为实现上述目的,本申请提供了一种电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述计算机程序时实现如上述目录查询方法的步骤。

为实现上述目的,本申请提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述目录查询方法的步骤。

通过以上方案可知,本申请提供的一种目录查询方法,包括:当接收到目标目录的查询请求时,利用线程池中的主线程读取所述目标目录中的每个目录项;利用所述线程池中除所述主线程之外的空闲线程读取每个所述目录项的元数据;根据所有所述目录项和所有所述元数据构建数据包,并返回所述数据包。

本申请提供的目录查询方法,引入一个线程池,该线程池具备可以配制的线程数量,在打开目录操作中采用了线程池实现读取目录项和读取目录项元数据的并发操作。由此可见,本申请提供的目录查询方法,提高了打开目录操作速度,从而提高服务器响应速度。本申请还公开了一种目录查询系统及一种电子设备和一种计算机可读存储介质,同样能实现上述技术效果。

应当理解的是,以上的一般描述和后文的细节描述仅是示例性的,并不能限制本申请。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。附图是用来提供对本公开的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本公开,但并不构成对本公开的限制。在附图中:

图1为根据一示例性实施例示出的一种目录查询方法的流程图;

图2为根据一示例性实施例示出的另一种目录查询方法的流程图;

图3为根据一示例性实施例示出的一种目录查询系统的结构图;

图4为根据一示例性实施例示出的一种电子设备的结构图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

本申请实施例公开了一种目录查询方法,提高了目录查询速度。

参见图1,根据一示例性实施例示出的一种目录查询方法的流程图,如图1所示,包括:

s101:当接收到目标目录的查询请求时,利用线程池中的主线程读取所述目标目录中的每个目录项;

本实施例的执行主体为服务器,用于接收到客户端的查询请求,并向客户端返回目录查询结果。该查询请求至少包括目标目录在服务器中的存储地址。

在本实施例中引入一个线程池,该线程池具备可以配制的线程数量,线程池中的主线程用于根据查询请求中的存储地址在服务器中读取目标目录中的目录项。

s102:利用所述线程池中除所述主线程之外的空闲线程读取每个所述目录项的元数据;

在具体实施中,利用线程池中除主线程之外的空闲线程读取每个目录项的元数据,此处的元数据可以包括目录项的文件大小、创建时间和文件权限等。

可以理解的是,对于不同目录项的元数据可以利用不同的线程并行读取,每个目录项的元数据为异步读取,通过线程池中的多个线程并发处理,提高整体处理速度。

s103:根据所有所述目录项和所有所述元数据构建数据包,并返回所述数据包。

在具体实施中,当所有目录项的元数据全部读取完成后,根据目录项和所有的元数据构建数据包,比将该数据包返回值客户端,客户端解析该数据包并展示给用户。

本申请实施例提供的目录查询方法,引入一个线程池,该线程池具备可以配制的线程数量,在打开目录操作中采用了线程池实现读取目录项和读取目录项元数据的并发操作。由此可见,本申请实施例提供的目录查询方法,提高了打开目录操作速度,从而提高服务器响应速度。

本申请实施例公开了一种目录查询方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:

参见图2,根据一示例性实施例示出的另一种目录查询方法的流程图,如图2所示,包括:

s201:接收到目标目录的查询请求;

s202:利用线程池中的主线程读取所述目标目录中的当前目录项;

s203:判断当前目录项是否需要展示元数据;若是,则进入s204,若否,则进入s205;

s204:利用所述线程池中除所述主线程之外的空闲线程读取所述当前目录项的元数据,并进入s205;

s205:判断是否存在下一个目录项;若是,则将下一个目录项作为所述当前目录项,并重新进入s202;若否,则进入s205;

在本实施例中,当当前的目录项需要展示元数据时,利用线程池中的空闲线程读取目录项中的元数据,同时,主线程继续判断是否存在下一个目录项,若存在,则主线程同时读取该目录项,由此可见,步骤s204和步骤s205为并行执行。在下一迭代过程中,利用不同的空闲线程读取下一个目录项的元数据,不同线程读取元数据的过程为并行执行。

循环s202-s204直到所有需要展示元数据的目标项全部读取完成,进入s205。

s205:根据所有所述目录项构建所述数据包,并通过回调函数将所有所述目录项的元数据按照预设格式添加至所述数据包中。

在具体实施中,线程池中主线程读取的目录项构建数据包,异步读取目录项元数据的请求完成时,通过回调函数将目录项元数据格式化到数据包中。当一个数据包最后一个目录项元数据回调完成后,返回这个数据包给客户端。

下面介绍本申请提供的目录查询方法的应用实施例,具体包括以下步骤:

步骤1:系统初始化创建一个线程池。

步骤2:当服务器收到smb2_op_query_directory查询目录请求时,打开请求的目录。

步骤3:读取目录的当前目录项,如果该目录项需要展示给客户端异步发起一个读取目录项元数据的请求放到线程池中执行。主线程继续读取下一个目录项。

步骤4:线程池中的异步读取目录项元数据的请求完成时,通过回调函数将目录项元数据格式化到返回数据包中。

步骤5:当一个数据包最后一个目录项元数据回调完成后,返回这个数据包给客户端。

下面对本申请实施例提供的一种目录查询系统进行介绍,下文描述的一种目录查询系统与上文描述的一种目录查询方法可以相互参照。

参见图3,根据一示例性实施例示出的一种目录查询系统的结构图,如图3所示,包括:

第一读取模块301,用于当接收到目标目录的查询请求时,利用线程池中的主线程读取所述目标目录中的每个目录项;

第二读取模块302,用于利用所述线程池中除所述主线程之外的空闲线程读取每个所述目录项的元数据;

返回模块303,用于根据所有所述目录项和所有所述元数据构建数据包,并返回所述数据包。

本申请实施例提供的目录查询系统,引入一个线程池,该线程池具备可以配制的线程数量,在打开目录操作中采用了线程池实现读取目录项和读取目录项元数据的并发操作。由此可见,本申请实施例提供的目录查询系统,提高了打开目录操作速度,从而提高服务器响应速度。

在上述实施例的基础上,作为一种优选上述方式,所述第二读取模块302包括:

第一判断单元,用于判断当前目录项是否需要展示元数据;若是,则启动读取单元的工作流程,若否,则启动第二判断单元的工作流程;

所述读取单元,用于利用所述线程池中除所述主线程之外的空闲线程读取所述当前目录项的元数据,并启动所述第二判断单元的工作流程;

所述第二判断单元,用于判断是否存在下一个目录项;若是,则将下一个目录项作为所述当前目录项,并重新启动所述第一判断单元的工作流程;若否,则启动所述返回模块的工作流程。

在上述实施例的基础上,作为一种优选上述方式,所述元数据包括所述目录项的文件大小、创建时间和文件权限中的任一项或任几项的组合。

在上述实施例的基础上,作为一种优选上述方式,所述返回模块303具体为根据所有所述目录项构建所述数据包,通过回调函数将所有所述目录项的元数据按照预设格式添加至所述数据包中,并返回所述数据包的模块。

关于上述实施例中的系统,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

本申请还提供了一种电子设备,参见图4,本申请实施例提供的一种电子设备400的结构图,如图4所示,可以包括处理器11和存储器12。该电子设备400还可以包括多媒体组件13,输入/输出(i/o)接口14,以及通信组件15中的一者或多者。

其中,处理器11用于控制该电子设备400的整体操作,以完成上述的目录查询方法中的全部或部分步骤。存储器12用于存储各种类型的数据以支持在该电子设备400的操作,这些数据例如可以包括用于在该电子设备400上操作的任何应用程序或方法的指令,以及应用程序相关的数据,例如联系人数据、收发的消息、图片、音频、视频等等。该存储器12可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,例如静态随机存取存储器(staticrandomaccessmemory,简称sram),电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,简称eeprom),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,简称eprom),可编程只读存储器(programmableread-onlymemory,简称prom),只读存储器(read-onlymemory,简称rom),磁存储器,快闪存储器,磁盘或光盘。多媒体组件13可以包括屏幕和音频组件。其中屏幕例如可以是触摸屏,音频组件用于输出和/或输入音频信号。例如,音频组件可以包括一个麦克风,麦克风用于接收外部音频信号。所接收的音频信号可以被进一步存储在存储器12或通过通信组件15发送。音频组件还包括至少一个扬声器,用于输出音频信号。i/o接口14为处理器11和其他接口模块之间提供接口,上述其他接口模块可以是键盘,鼠标,按钮等。这些按钮可以是虚拟按钮或者实体按钮。通信组件15用于该电子设备400与其他设备之间进行有线或无线通信。无线通信,例如wi-fi,蓝牙,近场通信(nearfieldcommunication,简称nfc),2g、3g或4g,或它们中的一种或几种的组合,因此相应的该通信组件15可以包括:wi-fi模块,蓝牙模块,nfc模块。

在一示例性实施例中,电子设备400可以被一个或多个应用专用集成电路(applicationspecificintegratedcircuit,简称asic)、数字信号处理器(digitalsignalprocessor,简称dsp)、数字信号处理设备(digitalsignalprocessingdevice,简称dspd)、可编程逻辑器件(programmablelogicdevice,简称pld)、现场可编程门阵列(fieldprogrammablegatearray,简称fpga)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述的目录查询方法。

在另一示例性实施例中,还提供了一种包括程序指令的计算机可读存储介质,该程序指令被处理器执行时实现上述目录查询方法的步骤。例如,该计算机可读存储介质可以为上述包括程序指令的存储器12,上述程序指令可由电子设备400的处理器11执行以完成上述的目录查询方法。

说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的系统而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

还需要说明的是,在本说明书中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1