基于Socket实现的数据传输方法、电子设备及存储介质与流程

文档序号:40584423发布日期:2025-01-07 20:24阅读:14来源:国知局
基于Socket实现的数据传输方法、电子设备及存储介质与流程

本技术涉及通信,尤其涉及一种基于socket实现的数据传输方法、电子设备及存储介质。


背景技术:

1、目前,在socket进程间通信过程中,如图1a和图1b所示,发送者将待发送的数据打包成msg结构体数据,调用socket接口,将msg结构体数据拷贝(第一次拷贝)到socket缓存区;然后,数据转发服务模块调用socket接口从socket发送缓存区中拷贝(第二次拷贝)msg结构体数据,然后调用socket接口将msg结构体数据拷贝(第三次拷贝)到socket接收缓存区中;然后,接收者调用socket接口从socket接收缓存区中拷贝(第四次拷贝)该msg结构体数据。

2、在电子设备采用上述传统socket通信方式转发数据的情况下,单次数据传递过程会发生四次数据拷贝。由于数据拷贝次数多,严重影响了数据传输效率。


技术实现思路

1、本技术提供一种基于socket实现的数据传输方法及电子设备,可以减少数据拷贝次数,提升数据传输效率,提高用户体验。

2、第一方面,本技术提供一种基于socket实现的数据传输方法,电子设备包括socket接口、socket内核驱动、数据缓存模块和数据转发服务模块,所述方法包括:

3、socket内核驱动接收来自第一应用的第一数据;socket内核驱动将所述第一数据拷贝到所述数据缓存模块的第一缓存区;socket内核驱动将所述第一缓存区对应的第一缓存索引值写入所述数据转发服务模块的接收队列;socket内核驱动接收所述数据转发服务模块发送的第二数据,所述第二数据是基于所述第一缓存索引值得到的;socket内核驱动从所述第二数据解析出所述第一缓存索引值,并将所述第一缓存索引值写入第二应用的接收队列;socket内核驱动基于所述第一缓存索引值从所述第一缓存区中拷贝所述第一数据,将所述第一数据传输给所述第二应用。

4、通过本技术实施例提供的基于socket实现的数据传输方法,在内核空间新增数据缓存模块和socket内核驱动,socket内核驱动可以控制数据缓存模块的缓存区对来自第一应用的数据进行缓存,并将缓存区对应的缓存索引值传输给用户空间的数据转发服务模块,然后socket内核驱动可以从数据转发服务模块读取缓存索引值,并基于缓存索引值从缓存区拷贝数据,然后转发给第二应用。通过本技术,由于内核空间的数据缓存模块与用户空间的数据转发服务模块存在映射关系,使得内核空间和用户空间能够通过数据缓存模块共享数据,因此在本地进程间通信过程中,只需两次数据拷贝,相比于相关技术所需的四次数据拷贝,本技术方案能够减少数据拷贝次数,提升数据传输效率。

5、其中,第一应用可以是用户触发安装于电子设备的第三方应用,也可以是电子设备中的系统应用。例如,第一应用可以为相册、或相机等应用程序。

6、其中,第二应用可以是诸如管理功耗、管理策略、监控性能状态和/或收集用户习惯数据等服务类应用程序,应用程序b可以用于监控并管理应用程序a的各种事件数据。例如,第二应用可以为功耗管理服务程序、策略管理服务程序、性能状态监控服务程序、或用户习惯数据收集服务程序。

7、当应用程序a侧产生用户输入及响应数据时,应用程序b会获取该用户输入及响应数据。其中,应用程序a侧的数据需要经过数据转发服务模块转发后到达应用程序b。

8、在相关技术中,基于socket实现本地进程间的数据转发功能,单次消息传递中会发生4次数据拷贝。而在本技术中,基于socket实现本地进程间的数据转发功能,单次消息传递中会发生2次数据拷贝,降低了数据拷贝次数。

9、在一些可能实现方式中,数据转发服务模块的接收队列包括所述数据缓存模块的各个缓存区各自对应的缓存索引值。其中,数据缓存模块包括多个缓存区,每个缓存区对应一个缓存索引值。当数据缓存模块接收到socket内核驱动的缓存申请时,数据缓存模块会分配一个缓存区,并通知socket内核驱动该缓存区对应的缓存索引值。

10、在一些可能实现方式中,在所述socket内核驱动接收来自第一应用的第一数据之后,所述socket内核驱动将所述第一数据拷贝到所述数据缓存模块的第一缓存区之前,所述方法还包括:所述socket内核驱动确定所述第一数据的类型为第一业务类型;所述socket内核驱动向所述数据缓存模块发送申请消息,所述申请消息用于申请缓存区以存储所述第一业务类型的数据;所述socket内核驱动接收所述数据缓存模块的响应消息,所述响应消息用于指示为所述第一业务类型的数据分配所述第一缓存区,所述响应消息还包括所述第一缓存区对应的所述第一缓存索引值。

11、通过上述方案,当数据缓存模块接收到socket内核驱动的缓存申请时,数据缓存模块会分配一个缓存区,并通知socket内核驱动该缓存区对应的缓存索引值,以便于socket内核驱动将缓存索引值写入数据转发服务模块的接收队列,并且便于数据转发服务模块基于缓存索引值访问缓存区,对缓存区的数据进行修改;并且还便于socket内核驱动基于缓存索引值访问缓存区,将缓存区的数据拷贝并发送给第二应用。通过本技术方案,不但能够减少数据拷贝次数,提升数据传输效率,而且支持在用户空间对内核空间的数据缓存模块中缓存的转发数据进行访问并修改。

12、在一些可能实现方式中,所述第一业务类型、所述第一缓存区、所述第一缓存索引值存在映射关系。所述第一业务类型的数据属于所述第二应用请求采集的业务数据。

13、在一些可能实现方式中,在所述socket内核驱动接收来自第一应用的第一数据之前,所述方法还包括:响应于用户操作,所述第一应用执行第一业务,生成第一数据;所述第一应用调用所述socket接口,向所述socket内核驱动传输所述第一数据。

14、在一些可能实现方式中,所述第一应用调用所述socket接口,向所述socket内核驱动传输所述第一数据,包括:所述第一应用调用所述socket接口,按照预设规范将所述第一数据封装到第一消息结构体,并将所述第一消息结构体传输给所述socket内核驱动。

15、其中,第一消息结构体还可以称为第一msg结构体。msg结构体用于电子设备内部的进程间socket通信。在本技术方案中,电子设备可以采用msg结构体在不同的进程之间传递消息,提升了进程间socket通信的兼容性。

16、在一些可能实现方式中,在所述socket内核驱动将所述第一缓存区对应的第一缓存索引值写入所述数据转发服务模块的接收队列之后,所述方法还包括:所述socket内核驱动从所述数据转发服务模块的接收队列中按序读取缓存索引值,将读取到的缓存索引值封装到第二消息结构体,并将所述第一消息结构体传输给所述数据转发服务模块。

17、通过本技术方案,解决了使用socket进行数据转发过滤环节的多次拷贝问题,本技术设计了独有的共享缓存管理机制,并解决了与socket现有数据接口的兼容问题,提升了基于socket实现在本地进程间传输数据的效率。

18、在一些可能实现方式中,所述方法还包括:所述数据转发服务模块接收到数据修改指令;响应于所述数据修改指令,所述数据转发服务模块基于所述第一缓存索引值访问所述数据缓存模块中的第一缓存区,并基于所述数据修改指令对所述第一缓存区中的数据进行修改。

19、通过本技术方案,相比于相关技术中不支持在用户空间对转发数据进行修改或删除,本技术方案支持在用户空间对内核空间的数据缓存模块中缓存的转发数据进行访问并修改,可以实现在用户空间对转发数据进行修改或删除的目的,提升了数据传输的便捷性。

20、在一些可能实现方式中,在所述socket内核驱动接收所述数据转发服务模块发送的第二数据之前,所述方法还包括:所述数据转发服务模块调用所述socket接口,按照预设规范将所述第一缓存索引值封装到第三消息结构体,并将所述第三消息结构体作为所述第二数据传输给所述socket内核驱动。

21、在一些可能实现方式中,所述方法还包括:在所述socket内核驱动将所述第一缓存索引值写入所述第二应用的接收队列的情况下,所述socket内核驱动向所述第二应用发送新数据通知;所述socket内核驱动接收所述第二应用发送的用于接收新数据的第四消息结构体。

22、在一些可能实现方式中,所述socket内核驱动基于所述第一缓存索引值从所述第一缓存区中拷贝所述第一数据,并将所述第一数据传输给所述第二应用,包括:所述socket内核驱动基于所述第一缓存索引值访问所述第一缓存区,并将所述第一缓存区中的第一数据拷贝到所述第四消息结构体;所述socket内核驱动调用所述socket接口,将所述第四消息结构体传输给所述第二应用。

23、在一些可能实现方式中,所述数据缓存模块包括控制区域和数据区域,所述控制区域包括n个控制块,所述数据区域包括n个数据块,所述n个控制块与所述n个数据块之间一一对应,所述n个控制块中的部分控制块具有关联关系。控制块可以称为节点。

24、其中,控制块的特征结构包括节点状态、数据块分配大小、已使用大小、当前节点编号、下一节点编号、占用服务数量、数据块真实地址。

25、其中,所述第一缓存区对应于一个缓存集合,所述一个缓存集合包括一个控制块及对应的一个数据块,所述第一缓存索引值对应于所述一个数据块的编号。

26、在一些可能实现方式中,所述数据缓存模块的状态为以下各种状态中的一种状态:空闲状态、内核空间读写状态、等待状态、用户空间读写状态。

27、在一些可能实现方式中,所述方法还包括:socket内核驱动控制所述数据缓存模块在所述各种状态之间进行状态切换。

28、在一些可能实现方式中,所述socket内核驱动控制所述数据缓存模块在所述各种状态之间进行状态切换,包括:

29、所述数据缓存模块在初始化后处于所述空闲状态,等待分配;

30、在所述socket内核驱动向所述数据缓存模块拷贝数据之后,所述socket内核驱动将所述数据缓存模块的状态更新为所述等待状态;

31、当所述数据转发服务模块对所述数据缓存模块进行读写时,所述socket内核驱动将所述数据缓存模块的状态更新为所述用户空间读写状态;

32、在所述数据转发服务模块对所述数据缓存模块完成读写后,所述socket内核驱动再次将数据缓存模块的状态更新为等待或者空闲状态。

33、当所述socket内核驱动从所述数据缓存模块拷贝数据时,再次将所述数据缓存模块的状态更新为所述内核空间读写状态。

34、当所述socket内核驱动从所述数据缓存模块拷贝完数据后,释放所述数据缓存模块中已占用的缓存区,将所述数据缓存模块的状态更新为空闲状态。

35、通过本技术实施例提供的基于socket实现的数据传输方法,只需两次数据拷贝,相比于相关技术所需的四次数据拷贝,本技术方案能够减少数据拷贝次数。并且,相比于相关技术中不支持在用户空间对转发数据进行修改或删除,本技术方案中在内核空间新增数据缓存模块,用于对转发数据进行缓存,并且将数据缓存模块与用户空间的数据转发服务模块建立映射关系,使得内核空间和用户空间能够通过数据缓存模块共享数据,并且支持在用户空间对内核空间的数据缓存模块中缓存的转发数据进行访问并修改,由此可以实现在用户空间对转发数据进行修改或删除的目的。

36、第二方面,本技术提供一种基于socket实现的数据传输装置,该装置包括用于执行上述第一方面中的方法的单元。该装置可对应于执行上述第一方面中描述的方法,该装置中的单元的相关描述请参照上述第一方面的描述,为了简洁,在此不再赘述。

37、其中,上述第一方面描述的方法可以通过硬件实现,也可以通过硬件执行相应的软件实现。硬件或软件包括一个或多个与上述功能相对应的模块或单元。例如,处理模块或单元、显示模块或单元等。

38、第三方面,本技术提供一种电子设备,所述电子设备包括处理器、处理器以及存储器中存储的计算机程序或指令,处理器用于执行计算机程序或指令,使得第一方面中的方法被执行。

39、第四方面,本技术提供一种计算机可读存储介质,其上存储有用于实现第一方面中的方法的计算机程序(也可称为指令或代码)。例如,该计算机程序被计算机执行时,使得该计算机可以执行第一方面中的方法。

40、第五方面,本技术提供一种芯片,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。可选地,所述芯片还包括存储器,存储器与处理器通过电路或电线连接。

41、第六方面,本技术提供一种芯片系统,包括处理器。处理器用于读取并执行存储器中存储的计算机程序,以执行第一方面及其任意可能的实现方式中的方法。可选地,所述芯片系统还包括存储器,存储器与处理器通过电路或电线连接。

42、第七方面,本技术提供一种计算机程序产品,所述计算机程序产品包括计算机程序(也可称为指令或代码),所述计算机程序被电子设备执行时使得电子设备实现第一方面中的方法。

43、可以理解的是,上述第二方面至第七方面的有益效果可以参见上述第一方面中的相关描述,在此不再赘述。

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