CN116860488A - 一种进程通信方法和相关装置 - Google Patents

一种进程通信方法和相关装置 Download PDF

Info

Publication number
CN116860488A
CN116860488A CN202311130672.XA CN202311130672A CN116860488A CN 116860488 A CN116860488 A CN 116860488A CN 202311130672 A CN202311130672 A CN 202311130672A CN 116860488 A CN116860488 A CN 116860488A
Authority
CN
China
Prior art keywords
transmitted
message
channel
sending
receiving
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.)
Granted
Application number
CN202311130672.XA
Other languages
English (en)
Other versions
CN116860488B (zh
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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202311130672.XA priority Critical patent/CN116860488B/zh
Publication of CN116860488A publication Critical patent/CN116860488A/zh
Application granted granted Critical
Publication of CN116860488B publication Critical patent/CN116860488B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer And Data Communications (AREA)

Abstract

本申请公开一种进程通信方法和相关装置,可应用于云技术、人工智能、智慧交通、辅助驾驶等各种场景。在需要传输待传输数据时,通过发送进程的第一应用层调用第一通信层的API,从而由第一通信层对待传输数据进行封装,得到适合传输的待传输消息。基于发送进程的地址标识和接收进程的地址标识,在第一通道配置信息中进行通道查找,得到发送进程与接收进程进行通信所使用的第一通道,从而通过第一通道从发送进程向接收进程传输待传输消息。在接收进程接收到待传输消息后,通过接收进程的第二应用层调用第二通信层的API,从而由第二通信层对待传输消息进行解封装得到待传输数据。由此无需应用层再单独进行封装、解封装,提高了开发效率。

Description

一种进程通信方法和相关装置
技术领域
本申请涉及通信领域,特别是涉及一种进程通信方法和相关装置。
背景技术
进程是计算机资源分配的最小单位,每个进程都拥有自己的虚拟地址空间,并与其他进程的虚拟地址空间相互隔离,也就是说,一个进程只能访问自己的虚拟地址空间,不能访问其他进程的虚拟地址空间。为了使不同的进程之间能够互相访问并协调工作,因此需要进程通信(Inter Processes Communication,IPC)。
进程通信是一个进程向另一个进程传输数据的一种通信方式,以使不同的进程之间能够互相访问并协调工作。目前,进程通信主要采用传输控制协议(TransmissionControl Protocol,TCP)直连的通信方式。
然而,这种通信方式需要应用层面自行进行封装、解封装,开发效率较低。
发明内容
为了解决上述技术问题,本申请提供了一种进程通信方法和相关装置,由通信层(第一通信层、第二通信层)进行封装、解封装处理,应用层收到的是完成封装的待传输消息,发送的是完成解封装处理的待传输数据,无需应用层再单独进行封装、解封装,提高了开发效率。
本申请实施例公开了如下技术方案:
一方面,本申请实施例提供一种进程通信方法,所述方法包括:
当确定发送进程与接收进程进行通信时,获取待传输数据;
通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
一方面,本申请实施例提供一种进程通信装置,所述装置包括获取单元、封装单元、确定单元、传输单元和解封装单元:
所述获取单元,用于当确定发送进程与接收进程进行通信时,获取待传输数据;
所述封装单元,用于通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
所述确定单元,用于基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
所述传输单元,用于通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
所述解封装单元,用于在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
一方面,本申请实施例提供一种计算机设备,所述计算机设备包括处理器以及存储器:
所述存储器用于存储计算机程序,并将所述计算机程序传输给所述处理器;
所述处理器用于根据所述计算机程序中的指令执行前述任一方面所述的方法。
一方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序当被处理器执行时使所述处理器执行前述任一方面所述的方法。
一方面,本申请实施例提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现前述任一方面所述的方法。
由上述技术方案可以看出,当确定发送进程与接收进程需要进行通信时,获取待传输数据。然后,通过发送进程的第一应用层调用第一通信层的应用程序接口API,从而由第一通信层对待传输数据进行封装,得到适合传输的待传输消息,而无需第一应用层自行进行封装,第一通信层是发送进程的通信层。基于发送进程的地址标识和接收进程的地址标识,在第一通道配置信息中进行通道查找,得到发送进程与接收进程进行通信所使用的第一通道,从而通过第一通道从发送进程向接收进程传输待传输消息。在接收进程接收到待传输消息后,通过接收进程的第二应用层调用第二通信层的API,从而由第二通信层对待传输消息进行解封装得到待传输数据,而无需第二应用层自行进行解封装处理,第二通信层是接收进程的通信层。可见,本申请对消息的收发进行封装,从而通过调用API,由通信层(第一通信层、第二通信层)进行封装、解封装处理,应用层收到的是完成封装的待传输消息,发送的是完成解封装处理的待传输数据,无需应用层再单独进行封装、解封装,提高了开发效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术成员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种进程通信方法的应用场景架构图;
图2为本申请实施例提供的一种进程通信方法的流程图;
图3为本申请实施例提供的一种物理机上的通道配置信息的集中存储示例图;
图4为本申请实施例提供的一种一台物理机上进程通信的架构示例图;
图5为本申请实施例提供的一种跨机通信的架构示例图;
图6为本申请实施例提供的一种tbus通道的基本架构示例图;
图7为本申请实施例提供的一种数据队列的架构示例图;
图8为本申请实施例提供的一种字节对齐的原理示例图;
图9为本申请实施例提供的一种空闲区域在目标数据队列的情况示例图;
图10为本申请实施例提供的一种写入待传输消息后目标数据队列的状态示例图;
图11为本申请实施例提供的另一种空闲区域在目标数据队列的情况示例图;
图12为本申请实施例提供的另一种写入待传输消息后目标数据队列的状态示例图;
图13为本申请实施例提供的又一种写入待传输消息后目标数据队列的状态示例图;
图14为本申请实施例提供的一种进程通信的架构示例图;
图15为本申请实施例提供的另一种进程通信的架构示例图;
图16为本申请实施例提供的一种进程通信装置的结构图;
图17为本申请实施例提供的一种终端的结构图;
图18为本申请实施例提供的一种服务器的结构图。
具体实施方式
下面结合附图,对本申请的实施例进行描述。
目前,进程通信通常采用基于TCP、用户数据报协议(User Datagram Protocol,UDP)、超文本传输协议(Hypertext Transfer Protocol,HTTP)等方式的直连通信,以及在此之上封装的远程过程调用(Remote Procedure Call,RPC)方式。然而,这种通信方式需要应用层面自行进行封装、解封装,开发效率较低。
为了解决上述技术问题,本申请实施例提供一种进程通信方法,该方法对消息的收发进行封装,从而通过调用API,由通信层(第一通信层、第二通信层)进行封装、解封装处理,应用层收到的是完成封装的待传输消息,发送的是完成解封装处理的待传输数据,无需应用层再单独进行封装、解封装,提高了开发效率。
需要说明的是,本申请实施例提供的进程通信方法可应用于各种场景,包括但不限于云技术、人工智能、智慧交通、辅助驾驶等。具体可以应用于各种进程通信场景,例如游戏应用中的进程通信场景、视频应用中的进程通信场景等,本申请实施例对此不做限定。
本申请实施例提供的进程通信方法可以由计算机设备执行,该计算机设备可以是终端或服务器,或者是终端和服务器。服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能语音交互设备、智能手表、智能家电、车载终端、飞行器、智能音箱等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
如图1所示,图1示出了一种进程通信方法的应用场景架构图。在该应用场景中可以包括发送进程101和接收进程102,其中,发送进程101和接收进程102可以部署在同一物理机上,也可以部署在不同物理机上,当发送进程101和接收进程102部署在不同物理机上时,可以实现跨机通信。该物理机可以是本申请实施例的计算机设备,图1以该计算机设备是服务器100、发送进程101和接收进程102部署在服务器100为例。
服务器100通常会为各种业务应用提供业务服务,在提供业务服务时,进程并不是孤立的,不同的进程之间可能需要传递数据,从而实现对应的业务服务。在这种情况下,需要进程之间进行通信。两个进程之间进行通信时,这两个进程之间可以相互发送数据,其中,用于发送数据的进程可以称为发送进程(例如图1中发送进程101),用于接收数据的进程可以称为接收进程(例如图1中接收进程102)。
当确定发送进程101与接收进程102需要进行通信时,发送进程101可以获取待传输数据。然后,发送进程101的第一应用层调用第一通信层的应用程序接口(ApplicationProgramming Interface,API),从而由第一通信层对待传输数据进行封装,得到适合传输的待传输消息,而无需第一应用层自行进行封装,第一通信层是发送进程101的通信层。
基于发送进程101的地址标识和接收进程102的地址标识,在第一通道配置信息中进行通道查找,得到发送进程101与接收进程102进行通信所使用的第一通道,从而通过第一通道从发送进程101向接收进程102传输待传输消息。
在接收进程102接收到待传输消息后,通过接收进程102的第二应用层调用第二通信层的API,从而由第二通信层对待传输消息进行解封装得到待传输数据,而无需第二应用层自行进行解封装处理,第二通信层是接收进程102的通信层。本申请对消息的收发进行封装,从而通过调用API,由通信层(第一通信层、第二通信层)进行封装、解封装处理,应用层收到的是完成封装的待传输消息,发送的是完成解封装处理的待传输数据,无需应用层再单独进行封装、解封装,提高了开发效率。
需要说明的是,在本申请的具体实施方式中,整个过程中有可能会涉及到用户信息等相关的数据,当本申请以上实施例运用到具体产品或技术中时,需要获得用户单独同意或者单独许可,且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准。
接下来,将以计算机设备是服务器为例,结合附图对本申请实施例提供的进程通信方法进行介绍。参见图2,图2示出了一种进程通信方法的流程图,所述方法包括:
S201、当确定发送进程与接收进程进行通信时,获取待传输数据。
服务器通常会为各种业务应用提供业务服务,在提供业务服务时,进程并不是孤立的,不同的进程之间可能需要传递数据,从而实现对应的业务服务。在这种情况下,需要进程之间进行通信。两个进程之间进行通信时,这两个进程之间可以相互发送数据,例如能够通信的两个进程分别是进程A和进程B,则进程A可以向进程B发送数据,进程B也可以向进程A发送数据。其中,用于发送数据的进程可以称为发送进程,用于接收数据的进程可以称为接收进程,发送进程需要向接收进程传递的数据可以称为待传输数据,两个进程通信时,一个进程作为发送进程,另一个进程则作为接收进程。
例如,业务应用是游戏应用,服务器是游戏服务器,在游戏服务器中,需要进行通信的两个进程可以是进程A和进程B,若进程A是用于进行游戏排行的进程,进程B是网关进程,则在请求排行服务后,进程A可以将排行结果返回至进程B,以便为游戏应用提供游戏排行服务。在这种情况下,可以将进程A作为发送进程,将进程B作为接收进程,将排行结果作为待传输数据,由进程A向进程B发送排行结果,实现进程A与进程B之间的通信。
S202、通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层。
通常情况下,每个进程可以包括应用层和通信层。应用层用于执行各种业务逻辑,从而提供对应的业务服务;通信层用于提供通信服务,从而指示如何进行数据通信。相关技术在实现进程通信时,通常由应用层进行封装、解封装等。封装可以是指将待传输封装成可以进行传输的消息,消息是指通信过程中所传输的对象,消息是信息的载体,这里的信息指的是待传输数据。消息可以包括消息头和消息体,消息头可以用于指示消息发送的目的地,该目的地在本申请实施例中例如可以是接收进程,当然消息头也可以有其他作用,本申请实施例对此不做限定。消息体中可以包括待传输数据。在本申请实施例中,基于待传输数据进行封装得到的消息可以称为待传输消息。解封装可以是与封装相反的处理过程,即将待传输数据从待传输消息获取到,例如可以对待传输消息的消息体进行解码得到待传输数据。
由于应用层还需要处理各种业务逻辑,如果采用应用层执行封装、解封装,那么在进行开发时需要适应于对应的业务逻辑进行开发,而应用层处理的业务逻辑可能有很多,这就导致需要分别进行适应性开发,从而导致开发效率低。而通信层的主要职责就是负责进程间数据通信,并且不需要执行各种业务逻辑,为此,本申请实施例可以从应用层提取实现封装和解封装功能的程序代码,将封装、解封装的程序代码进行了封装得到API,从而将封装和解封装放在通信层实现。API 是一些功能、定义或者协议的集合,对外封装完善,可被调用。在本申请实施例中,API指的是封装、解封装功能的集合,进而使得应用层可以通过API的调用,由通信层实现封装、解封装。基于此,在本申请实施例中,发送进程的第一应用层可以调用第一通信层的API,并通过第一通信层对待传输数据进行封装得到待传输消息。其中,第一应用层可以是发送进程的应用层,第一通信层可以是发送进程的通信层。第一通信层可以为待传输数据增加消息头,将待传输数据放在消息体中,基于消息头和消息体组成待传输消息。
S203、基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道。
在本申请实施例中,每个进程都有唯一的地址标识,不同进程的地址标识不同。每一台物理机上存储有对应的通道配置信息,物理机是一种实体的计算机设备,例如服务器、终端等,发送进程所在物理机上的通道配置信息可以称为第一通道配置信息。通道配置信息是为每条通道(channel)配置的信息,例如可以包括通道的大小(queue size)、通道所对应的地址对(addrpair),其中,channel是在进程间传送数据的一种通信机制,通道所对应的地址对为使用该通道的两个进程分别对应的地址标识。故,在本申请实施例中,可以基于发送进程的地址标识和接收进程的地址标识,在第一通道配置信息中进行通道查找,若某个addrpair所表示的地址标识与发送进程的地址标识、接收进程的地址标识相匹配,则将该地址对所对应的通道作为发送进程与接收进程进行通信所使用的第一通道。
需要说明的是,本申请实施例对S203和S202的执行顺序不做限定,即可以先确定第一通道,再进行封装,也可以先进行封装,再确定第一通道。
在本申请实施例中,业务应用通过封装的相关收发接口收发数据,这些收发接口不涉及物理机的物理IP,可以直接基于发送进程的地址标识和接收进程的地址标识确定发送进程和接收进程进行通信所使用的通道,因此对于应用层而言可以屏蔽因进程的部署位置变更而带来的影响。
在一种可能的实现方式中,本申请实施例中用于通信的通道可以是基于共享内存实现的,例如可以是基于共享内存构建的无锁双通循环消息队列,此时,通道可以称为tbus通道。tbus是一种游戏服务器框架中的基础组件之一,主要的目的是为上层业务提供统一的进程间通信接口,屏蔽本地进程间通信以及远程进程通信的细节,使得开发人员可以集中精力关注业务逻辑。tbus是基于共享内存构建的无锁双通循环消息队列,无锁双通循环消息队列是指访问消息过程中无需加锁、两个循环消息队列,循环消息队列是队头和队尾相连的数据队列(即呈环形的数据队列)。两个循环消息队列一个作为数据发送队列,另一个则作为数据接收队列,通信的两个进程通过专用的数据发送队列、数据接收队列完成数据收发,实现本地进程通信或者远程进程间通信。通信的两个进程使用的两个循环消息队列称之为tbus通道,每一组通信的进程就需要有一个tbus通道。此时,通道配置信息还可以包括通道的共享内存(Shared Memory,shm)地址,shm地址可以指示该通道所使用的共享内存。
需要说明的是,在一种可能的实现方式中,可以将同一台物理机器上同一个业务应用相关的通道配置信息集中存储在全局通道信息表(Global Channel InformationMap,GCIM)中,一台物理机上具有一份GCIM。当通道是tbus通道时,tbus的通道管理工具可以是tbusmgr,tbusmgr可以增删改查通信进程间的tbus通道。此时,可以通过tbusmgr将通道配置信息刷新到各物理机器上的GCIM中,进程以只读的方式访问GCIM中的通道配置信息。另外,除了通道配置信息,GCIM中还可以包括控制信息,控制信息用于对待传输消息的写入位置和大小进行控制,从而基于控制信息控制如何将待传输消息写入tbus通道的队列。控制信息中例如可以包括位置信息和大小信息,位置信息用于指示待传输消息的写入位置,大小信息用于指示队列的大小,这样,在接收到待传输消息时,可以根据写入位置将待传输消息写入对应的队列,并且根据队列的大小以及待传输消息的大小控制写入至该队列的具体位置。
任何一台物理机上的通道配置信息的集中存储可以参见图3所示,通道管理工具获取各个通道的通道配置信息,进而将通道配置信息写入到GCIM中,以n个通道为例,则GCIM中可以包括各个通道的通道配置信息以及控制信息,各个通道的通道配置信息可以参见图3中通道1的通道配置信息、通道2的通道配置信息、……、通道n的通道配置信息。若发送进程是图3中的进程A,接收进程是图3中的进程B,图3所示的GCIM为进程A所在服务器的GCIM,则该GCIM上存储的通道配置信息即为第一通道配置信息,则进程A可以基于进程A的地址标识和进程B的地址标识在第一通道配置信息中进行通道查找,确定进程A和进程B之间进行通信所使用的第一通道。
可以理解的是,地址标识可以通过各种形式表示,例如可以是数字、符号等等。互联网中网际协议(Internet Protocol,IP)地址通常采用数字点串来表示,这种表示方式更为简单,便于识别和理解。参照IP地址的表示方式,在一种可能的实现方式中,发送进程的地址标识和接收进程的地址标识也可以采用数字点串的形式表示,数字点串包括多个数字段,任意相邻的两个数字段之间通过分隔符进行分隔。也就是说,地址标识可以使用类似于IP地址格式的数字点串来表示。其中,分隔符可以是能够用于分隔不同数字段的符号,通常情况下,分隔符可以是点号“.”。
需要说明的是,本申请实施例对数字段的段数,以及每个数字段中数字所表示的范围不做限定。在一些可能的实现方式中,可以根据业务自定义段数和每个数字段中数字表示的范围,以适应不同业务对进程分类表示地址标识的需要。例如,可以用“xx.xx.xxx”来表示进程的地址标识,也可以用”xx.xx.xx.xxx.xxx”来表示进程的地址标识,其中“x”表示数字,“.”为分隔符,具体使用什么格式的地址标识表示,完全由业务决定。
可以理解的是,在使用数字点串表示IP地址时,基于点分十进制得到的数字点串是常用的数字点串。点分十进制(Dotted Decimal Notation)全称为点分(点式)十进制表示法,是网际协议版本4(Internet Protocol version 4,IPv4)的地址表示方法。IPv4中用四个字节表示一个IP地址,每个字节按照十进制表示为0~255。点分十进制就是用4组从0~255的数字,来表示一个IP地址。也就是说,在本申请实施例中,可以使用点分十进制的数字点串来表示地址标识。
例如,对于32位的地址标识,可以分为4个数字段,每个数字段8位,用十进制数字表示,每个数字段中数字的范围为0~255,相邻两个数字段之间用点号分隔开,例如1.1.159.226。
通过上述类似于IP地址的数字点串,尤其是点分十进制的数字点串来表示进程的地址标识,表示方式更为简单,便于识别和理解,也便于描述通信关系。
在通过点分十进制的数字点串表示地址标识时,对于每一个具体业务,业务应用可以通过“点分十进制表示模板”指示具体使用哪种方式表示地址标识,从而可以基于“点分十进制表示模板”的指示,实现内存整数表示与点分十进制表示之间的相互转换。
“点分十进制表示模板”使用以下规则来描述:
点分十进制表示模板使用“[Desc:]bitsnum.[Desc:]bitsnum… [Desc:]bitsnum”格式的数字点串来表示,如果“点分十进制表示模板”分成n个数字段,每一数字段指定此段所占的位数。每一数字段描述串的格式为“描述串:数字”,其中,描述串是可选的,但必须提供表示位数的数字。例如“world:8.zone:8.func:8.instance:8”,此点分法表示地址标识分为4个数字段,每个数字段占用8位。
存储所有数字段的位数之和不能超过32位,当存储所有数字段的位数之和不足32位时,则优先使用地址低位的那些位来存储。假定数字点串为“A1.A2…An”,则An段的位将出现在最低的几位,An-1次之,……,A1出现在最前面,如下表所示,从表的左边到右边,依次是最高位至最低位:
如果业务应用不具体指定点分十进制表示模板,则业务应用使用缺省的点分十进制表示模板“8.8.8.8”,即地址标识分成四组,每组占用8位。
S204、通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息。
在得到第一通道后,便可以基于第一通道从发送进程向接收进程传输待传输消息。
可以理解的是,需要进行通信的两个进程(发送进程和接收进程)可以部署在同一个物理机上,也可以部署在不同的物理机上。根据发送进程和接收进程部署的位置不同,通过第一通道从发送进程向接收进程传输待传输消息的方式可能有所不同。
为此,在执行S204之前,可以先判断发送进程和接收进程是否部署在同一物理机。具体的,可以先获取发送进程所在物理机的第一设备标识,以及获取接收进程所在物理机的第二设备标识,进而将第一设备标识与第二设备标识进行比对得到比对结果。该比对结果可以指示第一设备标识与第二设备标识是否相同,进而指示发送进程与接收进程是否部署在同一物理机。相应的,通过第一通道从发送进程向接收进程传输待传输消息的方式可以是基于比对结果,通过第一通道从发送进程向接收进程传输待传输消息。
比对结果不同,通过第一通道从发送进程向接收进程传输待传输消息的方式可以有所不同。在一种可能的实现方式中,若比对结果指示第一设备标识和第二设备标识相同,则确定发送进程和接收进程部署在同一物理机,则可以由发送进程直接通过第一通道向接收进程传输待传输消息。
参见图4所示,图4示出了一种一台物理机上进程通信的架构示例图,对于该台物理机,通道管理工具可以将各个通道的通道配置信息写入到GCIM中,该台物理机的GCIM中的通道配置信息可以称为第一通道配置信息,发送进程和接收进程可以从GCIM中读取第一通道配置信息,进而基于第一通道配置信息确定第一通道。当基于比对结果确定发送进程和接收进程部署在同一物理机时,则发送进程直接通过第一通道向接收进程发送待传输消息。
在另一种可能的实现方式中,若比对结果指示第一设备标识和第二设备标识不相同,则确定发送进程和接收进程部署在不同物理机,则可以基于中转代理进程实现网络级的数据中转。具体的,可以通过第一通道,从发送进程向发送进程对应的第一中转代理进程传输待传输消息。在第一中转代理进程获取到待传输消息后,通过网络从第一中转代理进程向接收进程对应的第二中转代理进程发送待传输消息。在第二中转代理进程获取到待传输消息后,通过第二中转代理进程向接收进程传输待传输消息。其中,第一中转代理进程可以是与发送进程部署在同一物理机、用于数据中转的进程;第二中转代理进程可以是与接收进程部署在同一物理机、用于数据中转的进程,位于不同物理机的第一中转代理进程和第二中转代理进程可以通过网络进行数据传输。当本申请实施例中的通道是tbus通道时,中转代理进程可以用tbusd表示,tbusd是tbus的跨机消息中转代理进程。
需要说明的是,在每台需要跨机通信的物理机上,可以部署中转代理进程,此时跨机通信的架构示例图可以参见图5所示。图5中以两个物理机分别是第一物理机和第二物理机为例,第一物理机和第二物理机上分别可以部署tbusd,其中,第一物理机上部署的tbusd可以称为第一中转代理进程,第二物理机上部署的tbusd可以称为第二中转代理进程。第一中转代理进程和第二中转代理进程之间需要通过网络进行数据传输,二者之间的通信需要查询路由信息,从而确定如何通过一个中转代理进程传输到另一个中转代理进程,而路由信息可以存储在全局路由表(Global Route Map,GRM)中,当通道是tbus通道时,tbus的路由管理工具可以是trelaymgr,trelaymgr可以增删改查通信进程间的路由信息,可以通过trelaymgr将路由信息写入到GRM中,中转代理进程以只读的方式访问GRM中的路由信息。通过tbusmgr将通道配置信息刷新到各物理机器上的GCIM中,进程以只读的方式访问GCIM中的通道配置信息。
假设,第一物理机上的进程A为发送进程,第二物理机上的进程B为接收进程,则进程A可以从GCIM中读取第一通道配置信息,从而确定第一通道。进程A通过第一通道向第一中转代理进程传输待传输消息。在第一中转代理进程获取到待传输消息后,第一中转代理进程根据GRM中相应的路由信息,通过网络从第一中转代理进程向第二中转代理进程发送待传输消息。在第二中转代理进程获取到待传输消息后,通过第二中转代理进程向进程B传输待传输消息。其中,第二中转代理进程向进程B传输待传输消息使用的是第二通道,第二通道也是基于进程A的地址标识和进程B的地址标识确定的。
由图5可以看出,跨机通信实际上是通过第一通道、第一中转代理进程和第二中转代理进程之间的网络以及第二通道实现的,但是对于业务应用的进程A和进程B来说,中转代理进程间的数据中转是透明的,进程的使用流程并不需要改变,也就是业务应用的进程不需要关注是跨机通信还是同一物理机通信。对于进程A与进程B来说,进程A和进程B之间是基于二者间的通道实现通信的,只不过实际上此通道是虚拟通道(Virtual Channel),待传输消息实际是通过第一通道、第一中转代理进程和第二中转代理进程之间的网络以及第二通道进行传输的。
本申请实施例通过在物理机上部署tbusd,即使是部署在不同物理机的两个进程,也可以通过tbusd的中转实现进程之间跨机通信,从而保证业务应用的正常运行。
S205、在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
在接收进程接收到待传输消息后,通过接收进程的第二应用层调用第二通信层的API,从而由第二通信层对待传输消息进行解封装得到待传输数据,而无需第二应用层自行进行解封装处理,第二通信层是接收进程的通信层。在进行解封装时,可以去除待传输消息的消息头,从而露出消息体,进而从消息体中取出待传输数据。需要说明的是,在进程间进行通信时,同时传输的可能不止一个待传输消息,此时多个待传输消息形成字节流,在进行解封装时,需要从完整的字节流中拆分得到一个个待传输消息,从而从每个待传输消息中取出对应的待传输数据。
由上述技术方案可以看出,当确定发送进程与接收进程需要进行通信时,获取待传输数据。然后,通过发送进程的第一应用层调用第一通信层的应用程序接口API,从而由第一通信层对待传输数据进行封装,得到适合传输的待传输消息,而无需第一应用层自行进行封装,第一通信层是发送进程的通信层。基于发送进程的地址标识和接收进程的地址标识,在第一通道配置信息中进行通道查找,得到发送进程与接收进程进行通信所使用的第一通道,从而通过第一通道从发送进程向接收进程传输待传输消息。在接收进程接收到待传输消息后,通过接收进程的第二应用层调用第二通信层的API,从而由第二通信层对待传输消息进行解封装得到待传输数据,而无需第二应用层自行进行解封装处理,第二通信层是接收进程的通信层。可见,本申请对消息的收发进行封装,从而通过调用API,由通信层(第一通信层、第二通信层)进行封装、解封装处理,应用层收到的是完成封装的待传输消息,发送的是完成解封装处理的待传输数据,无需应用层再单独进行封装、解封装,提高了开发效率。
在本申请实施例中,通道是发送进程和接收进程进行通信的关键。而通道可以有不同的设计,根据通道设计的不同,通过第一通道从发送进程向接收进程传输待传输消息的方式也可以有所不同。可以理解的是,共享内存是将内存进行共享,从而允许多个不相关的进程访问同一个逻辑内存,直接将一块裸露的内存放在需要数据传输的进程面前,以供进程使用。基于共享内存的这一特点,在一种可能的实现方式中,通道可以是基于共享内存实现的,以共享内存为媒介,相应的,第一通道可以是基于第一共享内存实现的,在这种情况下,通过第一通道,从发送进程向接收进程传输待传输消息的方式可以是通过发送进程将待传输消息写入至第一共享内存,进而通过接收进程获取第一共享内存中的待传输消息。
使用共享内存进行进程间的通信非常方便,而且数据的共享使进程间的数据不用传送,而是直接访问内存,加快了通信的效率。并且,待传输消息采用共享内存进行存储,在进程重启等场景下能够短暂缓存待传输消息,避免因进程重启而导致待传输消息丢失,影响进程间通信。
需要说明的是,发送进程和接收进程可以部署在同一个物理机上,也可以部署在不同的物理机上。根据发送进程和接收进程部署的位置不同,通过接收进程获取第一共享内存中的待传输消息的方式可能有所不同。
为此,在通过接收进程获取第一共享内存中的待传输消息之前,可以先判断发送进程和接收进程是否部署在同一物理机。该判断方法与前述介绍的判断方法类似,此处不再赘述。若确定发送进程和接收进程部署在同一物理机,则通过接收进程获取第一共享内存中的待传输消息的方式可以是通过接收进程从第一共享内存中读取待传输消息,也就是说,发送进程将待传输消息写入到第一共享内存,接收进程从第一共享内存中读取该待传输消息,发送进程和接收进程直接通过第一共享内存进行通信。该过程的实现架构图可以与图4所示的示例图类似,只不过此时的第一通道以第一共享内存为媒介。
若确定发送进程和接收进程部署在不同的物理机上,则可以基于中转代理进程实现网络级的数据中转。具体的,通过接收进程获取第一共享内存中的待传输消息的方式可以是通过发送进程对应的第一中转代理进程从第一共享内存中读取待传输消息,在第一中转代理进程获取到待传输消息后,基于目标共享内存中存储的路由信息,通过第一中转代理进程向接收进程对应的第二中转代理进程发送待传输消息。其中,第一中转代理进程是通过网络将待传输消息传输至第二中转代理进程的,路由信息可以存储在目标共享内存的GRM中。然后,通过第二中转代理进程将待传输消息写入第二共享内存,接收进程对应的第二通道是基于第二共享内存实现的,第二通道是基于发送进程的地址标识和接收进程的地址标识,在第二通道配置信息中进行通道查找得到的。可以理解的是,由于发送进程与接收进程部署在不同的物理机上,因此,第一共享内存与第二共享内存位于不同的物理机上,第一共享内存和发送进程位于同一物理机上,第二共享内存和接收进程位于同一物理机上。接着,通过接收进程从第二共享内存中读取待传输消息。也就是说,发送进程将待传输消息写入到第一共享内存,第一中转代理进程从第一共享内存中读取待传输消息,并通过网络将待传输消息传输到第二中转代理进程。第二中转代理进程将待传输数据写入到第二共享内存,接收进程从第二共享内存中读取该待传输消息,中转代理进程进行网络级的数据中转,从而使得发送进程和接收进程基于共享内存完成通信。该过程的实现架构图可以与图5所示的示例图类似,只不过此时的第一通道以第一共享内存为媒介,第二通道以第二共享内存为媒介。
使用共享内存进行进程间的跨机通信非常方便,而且数据的共享使进程间的数据不用传送,而是直接访问内存,加快了通信的效率。并且,待传输消息采用共享内存进行存储,在进程重启等场景下能够短暂缓存待传输消息,避免因进程重启而导致待传输消息丢失,影响进程间通信。
在一种可能的实现方式中,第一通道包括基于第一共享内存的目标数据队列,目标数据队列可以作为发送进程的数据发送队列,作为接收进程的数据接收队列。目标数据队列拥有“先进者先出,后进者后出“的特性,同时目标数据队列也只支持两种操作,一个是在队尾进行写入的操作,一个是在队头进行读取的操作。基于目标数据队列的特性,通过发送进程将待传输消息写入至第一共享内存的方式可以是通过发送进程在目标数据队列的队尾写入待传输数据。通过接收进程从第一共享内存中读取待传输消息的方式可以是通过接收进程从目标数据队列的队头读取待传输消息。其中,基于第一共享内存的目标数据队列实际上是指在基于第一共享内存存储待传输消息时,是以目标数据队列的结构形式存储待传输消息的。
在一种可能的实现方式中,本申请实施例中两个进程进行通信的通道可以是基于共享内存的数据队列,当该数据队列是无锁双通循环消息队列时,即两个进程进行通信的通道可以是tbus通道,tbus通道为进程提供端对端通信,tbus通道是基于共享内存构建的无锁数据通信循环队列,每个tbus通道包括两个数据队列和控制信息块,数据队列是一种进程、系统间进行通信的常用组件,通过读写出入数据队列的消息来通信,实现异步通信,简化业务应用设计。数据队列还能作为缓存,提高业务应用的吞吐量。控制信息块用于存储控制信息。对于使用tbus通道进行通信的进程来说,使用其中一个数据队列作为数据发送队列,另一个数据队列作为数据接收队列,因此tbus通道以全双工的方式工作,全双工是一种通信方式,允许两个进程同时进行双向通信,即可以同时发送和接收数据,例如进程A向进程B发送数据的同时,进程B也可以向进程A发送数据,其基本架构如图6所示。其中,两个数据队列分别如图6中601和602所示,控制信息块如图6中603所示。以通信的两个进程分别是604所示的进程A和605所示的进程B为例,进程A和进程B可以共享控制信息块603中的控制信息。
对于进程A来说,进程A将其中一个数据队列作为数据发送队列,另一个数据队列作为数据接收队列,例如进程A将数据队列601作为数据发送队列,进程A可以将待传输消息写入(write)到数据队列601,从而实现待传输消息的发送;进程A将数据队列602作为数据接收队列,进程A从数据队列602中读取(read)待传输消息,从而实现待传输消息的接收。对于进程B来说,进程B将其中一个数据队列作为数据发送队列,另一个数据队列作为数据接收队列,通常情况下,进程A的数据发送队列可以作为进程B的数据接收队列,进程A的数据接收队列可以作为进程B的数据发送队列。例如进程B将数据队列601作为数据接收队列,进程B从数据队列601中读取待传输消息,从而实现待传输消息的接收;进程B将数据队列602作为数据发送队列,进程B可以将待传输消息写入到数据队列602,从而实现待传输消息的发送。
基于图6所示的基本架构,第一通道可以包括两个数据队列,例如分别是基于第一共享内存的第一数据队列和基于第一共享内存的第二数据队列,若发送进程是第一进程,接收进程是第二进程,目标数据队列可以为第一数据队列,即将第一数据队列作为第一进程的数据发送队列,以及将第一数据队列作为第二进程的数据接收队列。若发送进程是第二进程,接收进程是第一进程,目标数据队列可以为第二数据队列,即将第二数据队列作为第二进程的数据发送队列,以及将第二数据队列作为第一进程的数据接收队列。
若发送进程是第一进程,接收进程是第二进程,目标数据队列可以为第二数据队列,即将第二数据队列作为第一进程的数据发送队列,以及将第二数据队列作为第二进程的数据接收队列。若发送进程是第二进程,接收进程是第一进程,目标数据队列可以为第一数据队列,即将第一数据队列作为第二进程的数据发送队列,以及将第一数据队列作为第一进程的数据接收队列。
需要说明的是,本申请实施例提供的数据队列(Data queue)可以是数据通信循环队列,其架构如图7所示。数据队列由Size、Head、Tail三个参数决定,其中,Size表示数据队列的大小,Head表示头指针,Tail表示尾指针。当Head等于Tail时数据队列为空,当Tail+1等于Head时数据队列为满。
在使用数据队列进行读取和写入时,当数据队列未满时,在数据队列的队尾写入数据(例如待传输消息),只需修改尾指针;当数据队列未空时,从数据队列的队头读出数据(例如待传输消息),仅需修改头指针。每次数据的写入或读取只用修改一个指针,因此不用加锁,以提高读写效率。
本申请实施例通过数据队列进行进程间通信,可以实现任意进程间的通信,无需考虑同步问题,不用加锁,更加方便,提高了读写效率。
在基于数据队列实现进程间通信的情况下,需要传输的待传输消息会存储在数据队列中,并且需要从数据队列中读取待传输消息继续进行传输。由于计算机设备的内存是以字节为单位进行存储和访问的,而不是以单个位或单个字进行存储和访问的,因此,为了保证内存的数据访问效率和正确性,计算机设备需要按照特定的规则来排列内存中的数据。本申请使用的数据队列是基于共享内存实现的,故本申请实施例中为了提高数据队列的数据访问效率,在向数据队列写入待传输消息时,也可以按照特定的规则来排列数据队列中的消息。这里的规则可以是字节对齐的规则,数据队列中的消息写入支持指定字节对齐方式,每个放入数据队列中的每一个消息按指定字节对齐,缺省按若干字节(例如8字节)对齐。
基于此,在一种可能的实现方式中,通过发送进程在目标数据队列的队尾写入待传输数据的方式可以是通过发送进程,按照字节对齐的规则在目标数据队列的队尾写入待传输数据。
在本申请实施例中,字节对齐的实现策略可以是通过填充若干字节保证数据队列中的消息是按指定字节对齐,将待传输消息保存在目标数据队列中地址连续的空闲区域。实现字节对齐的目标数据队列的状态可以参见图8所示,为了保证目标数据队列中的消息是按指定字节对齐,可以在目标数据队列中填充若干字节,填充的字节(padding)可以参见图8中黑色部分所示。
在进行字节对齐时,根据空闲区域在目标数据队列中所处位置的不同,按照字节对齐的规则在目标数据队列的队尾写入待传输数据的方式可以有所不同。当空闲区域在目标数据队列的中间时,参见图9中白色位置所示。如果目标数据队列的队尾的空闲区域足够存放一个完整的待传输消息就直接存放,存放后的目标数据队列状态如图10所示。如果目标数据队列的队尾的空闲区域不够存放一个完整的待传输消息,则存入失败,返回目标数据队列已满的错误。
当空闲区域在目标数据队列的两头时,参见图11中白色位置所示。如果目标数据队列的队尾可以存放一个完整的待传输消息,则直接存放,存放后的目标数据队列状态如图12所示。如果目标数据队列的队尾不可以存放一个完整的待传输消息,则在队尾放一个假消息(即填充若干字节padding),将尾指针移到目标数据队列的最前面,存放后的目标数据队列状态如图13所示。
本申请实施例的数据队列支持字节对齐,从而在写入待传输消息时按照字节对齐的规则进行写入,提高了数据队列的数据访问效率和正确性。
接下来,对进程通信的整体流程进行介绍。进程通信的整体流程主要包括业务应用的进程初始化和数据收发过程。
当使用的通道是tbus通道时,进程初始化可以是调用tbus的API进行初始化,将需要连接的对端信息、channel的优先级等从GCIM中读取。对于发送进程来说,对端信息可以是接收进程的信息,例如接收进程的地址标识等信息;对于接收进程来说,对端信息可以是发送进程的信息,例如发送进程的地址标识等信息。在发送进程和接收进程之间存在多条通道时,可以基于channel的优先级选择优先级最高的通道作为发送进程和接收进程进行通信所使用的第一通道。
在完成进程初始化后,可以执行数据收发过程。在数据收发过程中,根据发送进程和接收进程部署的位置不同,又可以分为2个子流程。对于发送进程和接收进程部署在同一台物理机上,待传输消息无需使用tbusd作为中转。对于这种情况,待传输消息的传输使用该物理机的共享内存即可,参见图14所示。当业务应用的进程初始化成功后,基于发送进程和接收进程分别对应的地址标识,在GCIM中存储的第一通道配置信息中进行通道查找,确定所需使用的tbus通道,然后调用相应的数据发送、接收接口,通过基于tbus通道进行待传输消息的收发。
对于发送进程和接收进程部署在不同的物理机上,需要通过tbusd进行网络级的数据中转。对于该情况,传输的数据需要经过发送进程所在物理机的共享内存,然后再经由tbusd通过网络传输到接收进程所在物理机上。参见图15所示,其具体流程如下:
步骤 1:业务应用的进程初始化。
步骤 2:业务应用的进程调用数据收、发接口。
步骤 3:启动tbusd,tbusd初始化时会确定发送进程和接收进程是否部署在同一物理机,若部署在不同物理机,则去查找发送进程所在物理机的第一通道,并依附(attach)到第一通道的第一共享内存,从而实现基于第一共享内存的第一通道。
步骤 4:tbusd调用数据收、发接口,从第一共享内存中读取待传输消息。
步骤 5:tbusd根据GMR中相应的路由信息,通过网络向第二通道对应的tbusd发送待传输消息。
步骤 6:第二通道对应的tbusd收到待传输消息后,会将待传输消息放入对应的第二共享内存中,第二通道是基于第二共享内存实现的。
步骤 7:接收进程调用接口进行待传输消息的收发。
需要说明的是,本申请在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。
基于图2对应实施例提供的进程通信方法,本申请实施例还提供一种进程通信装置1600。参见图16所示,所述进程通信装置1600包括获取单元1601、封装单元1602、确定单元1603、传输单元1604和解封装单元1605:
所述获取单元1601,用于当确定发送进程与接收进程进行通信时,获取待传输数据;
所述封装单元1602,用于通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
所述确定单元1603,用于基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
所述传输单元1604,用于通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
所述解封装单元1605,用于在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
在一种可能的实现方式中,所述第一通道是基于第一共享内存实现的,所述传输单元1604,用于:
通过所述发送进程将所述待传输消息写入至所述第一共享内存;
通过所述接收进程获取所述第一共享内存中的所述待传输消息。
在一种可能的实现方式中,所述传输单元1604,用于:
通过所述接收进程从所述第一共享内存中读取所述待传输消息。
在一种可能的实现方式中,所述传输单元1604,用于:
通过所述发送进程对应的第一中转代理进程从所述第一共享内存中读取所述待传输消息;
在所述第一中转代理进程获取到所述待传输消息后,基于目标共享内存中存储的路由信息,通过所述第一中转代理进程向所述接收进程对应的第二中转代理进程发送所述待传输消息;
通过所述第二中转代理进程将所述待传输消息写入第二共享内存,所述接收进程对应的第二通道是基于所述第二共享内存实现的,所述第二通道是基于所述发送进程的地址标识和所述接收进程的地址标识,在第二通道配置信息中进行通道查找得到的;
通过所述接收进程从所述第二共享内存中读取所述待传输消息。
在一种可能的实现方式中,所述第一通道包括基于所述第一共享内存的目标数据队列,所述传输单元1604,用于:
通过所述发送进程,在所述目标数据队列的队尾写入所述待传输数据;
通过所述接收进程,从所述目标数据队列的队头读取所述待传输消息。
在一种可能的实现方式中,所述第一通道包括基于所述第一共享内存的第一数据队列和基于所述第一共享内存的第二数据队列,若所述发送进程是第一进程,所述接收进程是第二进程,所述目标数据队列为第一数据队列;若所述发送进程是第二进程,所述接收进程是第一进程,所述目标数据队列为第二数据队列;
或者,若所述发送进程是第一进程,所述接收进程是第二进程,所述目标数据队列为第二数据队列;若所述发送进程是第二进程,所述接收进程是第一进程,所述目标数据队列为第一数据队列。
在一种可能的实现方式中,所述传输单元1604,用于:
通过所述发送进程,按照字节对齐的规则在所述目标数据队列的队尾写入所述待传输数据。
在一种可能的实现方式中,所述装置还包括比对单元:
所述获取单元1601,还用于获取所述发送进程所在物理机的第一设备标识,以及获取所述接收进程所在物理机的第二设备标识;
所述比对单元,用于将所述第一设备标识与第二设备标识进行比对,得到比对结果;
所述传输单元1604,用于:
基于所述比对结果,通过所述第一通道从所述发送进程向所述接收进程传输所述待传输消息。
在一种可能的实现方式中,所述传输单元1604,用于:
若所述比对结果指示所述第一设备标识和所述第二设备标识不相同,通过所述第一通道,从所述发送进程向所述发送进程对应的第一中转代理进程传输所述待传输消息;
在所述第一中转代理进程获取到所述待传输消息后,通过网络从所述第一中转代理进程向所述接收进程对应的第二中转代理进程发送所述待传输消息;
在所述第二中转代理进程获取到所述待传输消息后,通过所述第二中转代理进程向所述接收进程传输所述待传输消息。
在一种可能的实现方式中,所述发送进程的地址标识和所述接收进程的地址标识采用数字点串的形式表示,所述数字点串包括多个数字段,任意相邻的两个数字段之间通过分隔符进行分隔。
由上述技术方案可以看出,当确定发送进程与接收进程需要进行通信时,获取待传输数据。然后,通过发送进程的第一应用层调用第一通信层的应用程序接口API,从而由第一通信层对待传输数据进行封装,得到适合传输的待传输消息,而无需第一应用层自行进行封装,第一通信层是发送进程的通信层。基于发送进程的地址标识和接收进程的地址标识,在第一通道配置信息中进行通道查找,得到发送进程与接收进程进行通信所使用的第一通道,从而通过第一通道从发送进程向接收进程传输待传输消息。在接收进程接收到待传输消息后,通过接收进程的第二应用层调用第二通信层的API,从而由第二通信层对待传输消息进行解封装得到待传输数据,而无需第二应用层自行进行解封装处理,第二通信层是接收进程的通信层。可见,本申请对消息的收发进行封装,从而通过调用API,由通信层(第一通信层、第二通信层)进行封装、解封装处理,应用层收到的是完成封装的待传输消息,发送的是完成解封装处理的待传输数据,无需应用层再单独进行封装、解封装,提高了开发效率。
本申请实施例还提供了一种计算机设备,该计算机设备可以执行进程通信方法。该计算机设备可以是终端,以终端为智能手机为例:
图17示出的是与本申请实施例提供的智能手机的部分结构的框图。参考图17,智能手机包括:射频(英文全称:Radio Frequency,英文缩写:RF)电路1710、存储器1720、输入单元1730、显示单元1740、传感器1750、音频电路1760、无线保真(英文缩写:WiFi)模块1770、处理器1780、以及电源1790等部件。输入单元1730可包括触控面板1731以及其他输入设备1732,显示单元1740可包括显示面板1741,音频电路1760可以包括扬声器1761和传声器1762。可以理解的是,图17中示出的智能手机结构并不构成对智能手机的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储器1720可用于存储软件程序以及模块,处理器1780通过运行存储在存储器1720的软件程序以及模块,从而执行智能手机的各种功能应用以及数据处理。存储器1720可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据智能手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器1720可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
处理器1780是智能手机的控制中心,利用各种接口和线路连接整个智能手机的各个部分,通过运行或执行存储在存储器1720内的软件程序和/或模块,以及调用存储在存储器1720内的数据,执行智能手机的各种功能和处理数据。可选的,处理器1780可包括一个或多个处理单元;优选的,处理器1780可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1780中。
在本实施例中,智能手机中的处理器1780可以执行以下步骤:
当确定发送进程与接收进程进行通信时,获取待传输数据;
通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
本申请实施例提供的计算机设备还可以是服务器,请参见图18所示,图18为本申请实施例提供的服务器1800的结构图,服务器1800可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上处理器,例如中央处理器(Central Processing Units,简称CPU)1822,以及存储器1832,一个或一个以上存储应用程序1842或数据1844的存储介质1830(例如一个或一个以上海量存储设备)。其中,存储器1832和存储介质1830可以是短暂存储或持久存储。存储在存储介质1830的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1822可以设置为与存储介质1830通信,在服务器1800上执行存储介质1830中的一系列指令操作。
服务器1800还可以包括一个或一个以上电源1826,一个或一个以上有线或无线网络接口1850,一个或一个以上输入输出接口1858,和/或,一个或一个以上操作系统1841,例如Windows ServerTM,Mac OS XTM,UnixTM, LinuxTM,FreeBSDTM等等。
在本实施例中,服务器1800中的中央处理器1822可以执行以下步骤:
当确定发送进程与接收进程进行通信时,获取待传输数据;
通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
根据本申请的一个方面,提供了一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序用于执行前述各个实施例所述的进程通信方法。
根据本申请的一个方面,提供了一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机程序,处理器执行该计算机程序,使得该计算机设备执行上述实施例各种可选实现方式中提供的方法。
上述各个附图对应的流程或结构的描述各有侧重,某个流程或结构中没有详述的部分,可以参见其他流程或结构的相关描述。
本申请的说明书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random Access Memory,简称RAM)、磁碟或者光盘等各种可以存储计算机程序的介质。
以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术成员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (14)

1.一种进程通信方法,其特征在于,所述方法包括:
当确定发送进程与接收进程进行通信时,获取待传输数据;
通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
2.根据权利要求1所述的方法,其特征在于,所述第一通道是基于第一共享内存实现的,所述通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息,包括:
通过所述发送进程将所述待传输消息写入至所述第一共享内存;
通过所述接收进程获取所述第一共享内存中的所述待传输消息。
3.根据权利要求2所述的方法,其特征在于,所述通过所述接收进程获取所述第一共享内存中的所述待传输消息,包括:
通过所述接收进程从所述第一共享内存中读取所述待传输消息。
4.根据权利要求2所述的方法,其特征在于,所述通过所述接收进程获取所述第一共享内存中的所述待传输消息,包括:
通过所述发送进程对应的第一中转代理进程从所述第一共享内存中读取所述待传输消息;
在所述第一中转代理进程获取到所述待传输消息后,基于目标共享内存中存储的路由信息,通过所述第一中转代理进程向所述接收进程对应的第二中转代理进程发送所述待传输消息;
通过所述第二中转代理进程将所述待传输消息写入第二共享内存,所述接收进程对应的第二通道是基于所述第二共享内存实现的,所述第二通道是基于所述发送进程的地址标识和所述接收进程的地址标识,在第二通道配置信息中进行通道查找得到的;
通过所述接收进程从所述第二共享内存中读取所述待传输消息。
5.根据权利要求3所述的方法,其特征在于,所述第一通道包括基于所述第一共享内存的目标数据队列,所述通过所述发送进程将所述待传输消息写入至所述第一共享内存,包括:
通过所述发送进程,在所述目标数据队列的队尾写入所述待传输数据;
所述通过所述接收进程从所述第一共享内存中读取所述待传输消息,包括:
通过所述接收进程,从所述目标数据队列的队头读取所述待传输消息。
6.根据权利要求5所述的方法,其特征在于,所述第一通道包括基于所述第一共享内存的第一数据队列和基于所述第一共享内存的第二数据队列,若所述发送进程是第一进程,所述接收进程是第二进程,所述目标数据队列为第一数据队列;若所述发送进程是第二进程,所述接收进程是第一进程,所述目标数据队列为第二数据队列;
或者,若所述发送进程是第一进程,所述接收进程是第二进程,所述目标数据队列为第二数据队列;若所述发送进程是第二进程,所述接收进程是第一进程,所述目标数据队列为第一数据队列。
7.根据权利要求5所述的方法,其特征在于,所述通过所述发送进程,在所述目标数据队列的队尾写入所述待传输数据,包括:
通过所述发送进程,按照字节对齐的规则在所述目标数据队列的队尾写入所述待传输数据。
8.根据权利要求1所述的方法,其特征在于,在所述通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息之前,所述方法还包括:
获取所述发送进程所在物理机的第一设备标识,以及获取所述接收进程所在物理机的第二设备标识;
将所述第一设备标识与第二设备标识进行比对,得到比对结果;
所述通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息,包括:
基于所述比对结果,通过所述第一通道从所述发送进程向所述接收进程传输所述待传输消息。
9.根据权利要求8所述的方法,其特征在于,所述基于所述比对结果,通过所述第一通道从所述发送进程向所述接收进程传输所述待传输消息,包括:
若所述比对结果指示所述第一设备标识和所述第二设备标识不相同,通过所述第一通道,从所述发送进程向所述发送进程对应的第一中转代理进程传输所述待传输消息;
在所述第一中转代理进程获取到所述待传输消息后,通过网络从所述第一中转代理进程向所述接收进程对应的第二中转代理进程发送所述待传输消息;
在所述第二中转代理进程获取到所述待传输消息后,通过所述第二中转代理进程向所述接收进程传输所述待传输消息。
10.根据权利要求1-9任一项所述的方法,其特征在于,所述发送进程的地址标识和所述接收进程的地址标识采用数字点串的形式表示,所述数字点串包括多个数字段,任意相邻的两个数字段之间通过分隔符进行分隔。
11.一种进程通信装置,其特征在于,所述装置包括获取单元、封装单元、确定单元、传输单元和解封装单元:
所述获取单元,用于当确定发送进程与接收进程进行通信时,获取待传输数据;
所述封装单元,用于通过所述发送进程的第一应用层调用第一通信层的应用程序接口API,并通过所述第一通信层对所述待传输数据进行封装得到待传输消息,所述第一通信层是所述发送进程的通信层;
所述确定单元,用于基于所述发送进程的地址标识和所述接收进程的地址标识,在第一通道配置信息中进行通道查找,得到所述发送进程与所述接收进程进行通信所使用的第一通道;
所述传输单元,用于通过所述第一通道,从所述发送进程向所述接收进程传输所述待传输消息;
所述解封装单元,用于在所述接收进程接收到所述待传输消息后,通过所述接收进程的第二应用层调用第二通信层的API,并通过所述第二通信层对所述待传输消息进行解封装得到所述待传输数据,所述第二通信层是所述接收进程的通信层。
12.一种计算机设备,其特征在于,所述计算机设备包括处理器以及存储器:
所述存储器用于存储计算机程序,并将所述计算机程序传输给所述处理器;
所述处理器用于根据所述计算机程序中的指令执行权利要求1-10任一项所述的方法。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,所述计算机程序当被处理器执行时使所述处理器执行权利要求1-10任一项所述的方法。
14.一种计算机程序产品,包括计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1-10任一项所述的方法。
CN202311130672.XA 2023-09-04 2023-09-04 一种进程通信方法和相关装置 Active CN116860488B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311130672.XA CN116860488B (zh) 2023-09-04 2023-09-04 一种进程通信方法和相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311130672.XA CN116860488B (zh) 2023-09-04 2023-09-04 一种进程通信方法和相关装置

Publications (2)

Publication Number Publication Date
CN116860488A true CN116860488A (zh) 2023-10-10
CN116860488B CN116860488B (zh) 2024-01-30

Family

ID=88230814

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311130672.XA Active CN116860488B (zh) 2023-09-04 2023-09-04 一种进程通信方法和相关装置

Country Status (1)

Country Link
CN (1) CN116860488B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117762658A (zh) * 2024-01-03 2024-03-26 北京火山引擎科技有限公司 进程间数据传输方法、装置、电子设备及存储介质
CN117931485A (zh) * 2024-03-22 2024-04-26 摩尔线程智能科技(北京)有限责任公司 一种数据传输系统及方法、电子设备和存储介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105487933A (zh) * 2015-11-24 2016-04-13 无锡江南计算技术研究所 一种基于核间异步消息队列与共享内存的域间通信方法
CN114461418A (zh) * 2022-01-04 2022-05-10 厦门科灿信息技术有限公司 进程间通信方法、装置及电子设备
CN115189920A (zh) * 2022-06-16 2022-10-14 阿里巴巴(中国)有限公司 跨网络域通信方法和相关装置
CN115827283A (zh) * 2023-02-09 2023-03-21 中国证券登记结算有限责任公司 一种跨平台信息传输方法和系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105487933A (zh) * 2015-11-24 2016-04-13 无锡江南计算技术研究所 一种基于核间异步消息队列与共享内存的域间通信方法
CN114461418A (zh) * 2022-01-04 2022-05-10 厦门科灿信息技术有限公司 进程间通信方法、装置及电子设备
CN115189920A (zh) * 2022-06-16 2022-10-14 阿里巴巴(中国)有限公司 跨网络域通信方法和相关装置
CN115827283A (zh) * 2023-02-09 2023-03-21 中国证券登记结算有限责任公司 一种跨平台信息传输方法和系统

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117762658A (zh) * 2024-01-03 2024-03-26 北京火山引擎科技有限公司 进程间数据传输方法、装置、电子设备及存储介质
CN117931485A (zh) * 2024-03-22 2024-04-26 摩尔线程智能科技(北京)有限责任公司 一种数据传输系统及方法、电子设备和存储介质
CN117931485B (zh) * 2024-03-22 2024-06-07 摩尔线程智能科技(北京)有限责任公司 一种数据传输系统及方法、电子设备和存储介质

Also Published As

Publication number Publication date
CN116860488B (zh) 2024-01-30

Similar Documents

Publication Publication Date Title
CN116860488B (zh) 一种进程通信方法和相关装置
CN109426549B (zh) 多芯片封装、装置及计算机系统
AU2014200239B2 (en) System and method for multiple sender support in low latency fifo messaging using rdma
JP7481436B2 (ja) Srネットワークでパケットを転送する方法、デバイス、及びシステム
US20210314303A1 (en) Application aware tcp performance tuning on hardware accelerated tcp proxy services
WO2024067336A1 (zh) 报文处理方法、可编程网卡设备、物理服务器及存储介质
CN113824638A (zh) 一种转发报文的方法、设备和系统
US20210336883A1 (en) Systems for providing an lpm implementation for a programmable data plane through a distributed algorithm
CN110177082A (zh) 一种数据处理方法、设备、介质以及装置
US20190324930A1 (en) Method, device and computer program product for enabling sr-iov functions in endpoint device
CN113891396B (zh) 数据包的处理方法、装置、计算机设备和存储介质
CN108768667B (zh) 一种用于多核处理器片内核间网络通信的方法
US20200228448A1 (en) Packet processing method and apparatus
CN110177047B (zh) 报文发送方法、装置、电子设备和计算机可读存储介质
CN112039796A (zh) 数据包传输方法和装置、存储介质和电子设备
US11258707B1 (en) Systems for building data structures with highly scalable algorithms for a distributed LPM implementation
CN118227343B (zh) 一种数据处理方法、系统、装置、设备、介质及产品
US20240056393A1 (en) Packet forwarding method and device, and computer readable storage medium
US11966351B2 (en) Network interface device
CN113986969A (zh) 数据处理方法、装置、电子设备和存储介质
CN114830105B (zh) 一种数据读取方法以及终端
CN112995005B (zh) 虚拟网络数据交换方法和装置
CN114666259A (zh) 报文传输的方法、装置、设备、存储介质及系统
CN116980495A (zh) 一种数据转换方法、装置、计算机设备、介质及产品
CN110719303B (zh) 一种容器化nrf的方法及系统

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
GR01 Patent grant
GR01 Patent grant