CN115766318A - 组件间的消息传递方法和装置、存储介质及电子装置 - Google Patents
组件间的消息传递方法和装置、存储介质及电子装置 Download PDFInfo
- Publication number
- CN115766318A CN115766318A CN202211366283.2A CN202211366283A CN115766318A CN 115766318 A CN115766318 A CN 115766318A CN 202211366283 A CN202211366283 A CN 202211366283A CN 115766318 A CN115766318 A CN 115766318A
- Authority
- CN
- China
- Prior art keywords
- message
- target
- component
- publishing
- published
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 122
- 230000006870 function Effects 0.000 claims description 128
- 238000012545 processing Methods 0.000 claims description 60
- 230000008569 process Effects 0.000 claims description 59
- 238000005316 response function Methods 0.000 claims description 49
- 238000013507 mapping Methods 0.000 claims description 20
- 238000012546 transfer Methods 0.000 claims description 17
- 238000004590 computer program Methods 0.000 claims description 8
- 230000005540 biological transmission Effects 0.000 abstract description 39
- 230000004044 response Effects 0.000 description 34
- 239000003795 chemical substances by application Substances 0.000 description 12
- 238000004891 communication Methods 0.000 description 12
- 238000010586 diagram Methods 0.000 description 10
- 230000001960 triggered effect Effects 0.000 description 7
- 230000000712 assembly Effects 0.000 description 6
- 238000000429 assembly Methods 0.000 description 6
- 230000009471 action Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 238000005406 washing Methods 0.000 description 2
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 0.000 description 2
- 238000004887 air purification Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000000889 atomisation Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 235000019504 cigarettes Nutrition 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 238000010408 sweeping Methods 0.000 description 1
- 230000002618 waking effect Effects 0.000 description 1
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L12/00—Data switching networks
- H04L12/28—Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/51—Discovery or management thereof, e.g. service location protocol [SLP] or web services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本申请公开了一种组件间的消息传递方法和装置、存储介质及电子装置,涉及智能家居/智慧家庭技术领域,该方法包括:通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息;根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;在目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件;根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈用于指示目标发布消息是否已发布给了所有消息订阅组件的第一发布结果。
Description
技术领域
本申请涉及智能家居/智慧家庭技术领域,具体而言,涉及一种组件间的消息传递方法和装置、存储介质及电子装置。
背景技术
目前,在嵌入式系统领域,通常按照现有通道进行数据传输,在系统内部实现消息分发与传递,使用的通道通常为消息队列。以两个独立的组件(如,业务组件)进行消息传递为例,两个组件分别创建自己的消息队列,并且各个组件对外各自提供一个写入自己消息队列的接口(即,写消息的接口、写消息队列接口),以实现两个组件之间的消息传递。
然而,上述组件间的消息传递方法,如果消息发送端想要将消息发送给多个接收端并且在发送完消息之后需要确认消息是否已被所有消息接收端所接收,则需要将消息分别发送给各个消息接收端,并等待各个消息接收端返回的应答消息,组件的处理逻辑复杂,消息传递的效率较低。
由此可见,相关技术中的组件间的消息传递方法,存在由于消息发送端需要分别向各个消息接收端发送消息并等待各个消息接收端的应答消息导致的组件的处理逻辑复杂、消息传递的效率低的问题。
发明内容
本申请实施例提供了一种组件间的消息传递方法和装置、存储介质及电子装置,以至少解决相关技术中的组件间的消息传递方式存在由于消息发送端需要分别向各个消息接收端发送消息并等待各个消息接收端的应答消息导致的组件的处理逻辑复杂、消息传递的效率低的问题。
根据本申请实施例的一个方面,提供了一种组件间的消息传递方法,包括:通过目标设备的消息传递组件获取所述目标设备的消息发布组件所发布的目标发布消息,其中,所述消息传递组件用于在所述目标设备的不同组件之间传递消息;根据所述目标发布消息的目标消息标识,确定所述目标设备中是否存在订阅了所述目标发布消息的消息订阅组件;在确定所述目标设备中存在订阅了所述目标发布消息的消息订阅组件、且所述消息发布组件指示将所述目标发布消息的发布结果反馈给所述消息发布组件的情况下,通过所述消息传递组件将所述目标发布消息传递给订阅了所述目标发布消息的每个消息订阅组件;根据在预设时间内所述目标发布消息已发布给的消息订阅组件,向所述消息发布组件反馈第一发布结果,其中,所述第一发布结果用于指示所述目标发布消息是否已发布给了所述目标发布消息的所有消息订阅组件。
根据本申请实施例的另一个方面,还提供了一种组件间的消息传递装置,包括:获取单元,用于通过目标设备的消息传递组件获取所述目标设备的消息发布组件所发布的目标发布消息,其中,所述消息传递组件用于在所述目标设备的不同组件之间传递消息;第一确定单元,用于根据所述目标发布消息的目标消息标识,确定所述目标设备中是否存在订阅了所述目标发布消息的消息订阅组件;传递单元,用于在确定所述目标设备中存在订阅了所述目标发布消息的消息订阅组件、且所述消息发布组件指示将所述目标发布消息的发布结果反馈给所述消息发布组件的情况下,通过所述消息传递组件将所述目标发布消息传递给订阅了所述目标发布消息的每个消息订阅组件;第一反馈单元,用于根据在预设时间内所述目标发布消息已发布给的消息订阅组件,向所述消息发布组件反馈第一发布结果,其中,所述第一发布结果用于指示所述目标发布消息是否已发布给了所述目标发布消息的所有消息订阅组件。
根据本申请实施例的又一方面,还提供了一种计算机可读的存储介质,该计算机可读的存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述组件间的消息传递方法。
根据本申请实施例的又一方面,还提供了一种电子装置,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,上述处理器通过计算机程序执行上述的组件间的消息传递方法。
在本申请实施例中,采用由消息传递组件在不同组件之间传递消息、并由消息传递组件进行消息分发结果的统计、并将统计结果发送给消息分发组件的方式,通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息;根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件;根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件,由于消息的分发和分发结果的统计都由消息传递组件完成,消息发布组件只需要调用消息传递组件的对应接口,可以实现无需消息发送端分别向各个消息接收端发送消息并等待各个消息接收端的应答消息的目的,达到简化组件的处理逻辑、提高消息传递效率的技术效果,进而解决了相关技术中的组件间的消息传递方式存在由于消息发送端需要分别向各个消息接收端发送消息并等待各个消息接收端的应答消息导致的组件的处理逻辑复杂、消息传递的效率低的问题。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1是根据本申请实施例的一种组件间的消息传递方法的硬件环境示意图;
图2是根据本申请实施例的一种可选的组件间的消息传递方法的流程示意图;
图3是根据本申请实施例的另一种可选的组件间的消息传递方法的流程示意图;
图4是根据本申请实施例的一种可选的组件间的消息传递方法的示意图;
图5是根据本申请实施例的另一种可选的组件间的消息传递方法的示意图;
图6是根据本申请实施例的一种可选的组件间的消息传递装置的结构框图;
图7是根据本申请实施例的一种可选的电子装置的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。
需要说明的是,本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本申请的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
根据本申请实施例的一个方面,提供了一种组件间的消息传递方法。该组件间的消息传递方法广泛应用于智慧家庭(Smart Home)、智能家居、智能家用设备生态、智慧住宅(Intelligence House)生态等全屋智能数字化控制应用场景。可选地,在本实施例中,上述组件间的消息传递方法可以应用于如图1所示的由终端设备102和服务器104所构成的硬件环境中。如图1所示,服务器104通过网络与终端设备102进行连接,可用于为终端或终端上安装的客户端提供服务(如应用服务等),可在服务器上或独立于服务器设置数据库,用于为服务器104提供数据存储服务,可在服务器上或独立于服务器配置云计算和/或边缘计算服务,用于为服务器104提供数据运算服务。
上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:WIFI(Wireless Fidelity,无线保真),蓝牙。终端设备102可以并不限定于为PC、手机、平板电脑、智能空调、智能烟机、智能冰箱、智能烤箱、智能炉灶、智能洗衣机、智能热水器、智能洗涤设备、智能洗碗机、智能投影设备、智能电视、智能晾衣架、智能窗帘、智能影音、智能插座、智能音响、智能音箱、智能新风设备、智能厨卫设备、智能卫浴设备、智能扫地机器人、智能擦窗机器人、智能拖地机器人、智能空气净化设备、智能蒸箱、智能微波炉、智能厨宝、智能净化器、智能饮水机、智能门锁等可以进行语音交互的语音设备。
本申请实施例的组件间的消息传递方法可以由服务器104来执行,也可以由终端设备102来执行,还可以是由服务器104和终端设备102共同执行。其中,终端设备102执行本申请实施例的组件间的消息传递方法也可以是由安装在其上的客户端来执行。
以由终端设备102来执行本实施例中的组件间的消息传递方法为例,图2是根据本申请实施例的一种可选的组件间的消息传递方法的流程示意图,如图2所示,该方法的流程可以包括以下步骤:
步骤S202,通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息。
本实施例中的组件间的消息传递方法可以应用到在目标设备的设备内部不同的组件之间进行消息分发与传递的场景。这里的目标设备上运行的操作系统可以是嵌入式系统的操作系统,其可以包括非实时操作系统和实时操作系统,例如,智能家居领域的智慧家庭的生态操作系统。嵌入式系统可以是包括硬件部分和软件部分,嵌入式系统的操作系统可以具有一般操作系统的核心功能,并负责嵌入式系统的全部软硬件资源的分配、调度工作控制、协调并发活动。目标设备可以是智能家居设备,也可以是其他类型的终端设备。
在嵌入式系统领域,在系统内部进行消息分发与传递的方式,通常是使用现有通道传输数据,所采用的通道可以是local socket(本地“套接字”,即本地网络通信的接口)、消息队列等。以通过消息队列方式进行系统内部的两个独立的业务组件(例如,组件,可以是业务组件)之间进行消息的分发和传递为例,对于组件1和组件2,两个组件需要同时满足以下条件:各自有自己的消息队列和能够保证读写过程的原子性的锁机制;对外提供一个写消息队列的接口(即,写消息队列接口),可以让对方通过调用该接口来完成其他组件向自己的组件写消息队列的操作,写消息队列接口通过加锁进行原子化操作保护;各自有poll机制(相当于定时器,用于唤醒进程)循环的读取各自的队列,如果有消息写入,就读出消息进行处理。组件1可以通过调用组件2的写消息队列接口,实现向组件2发送消息的目的。
然而,上述组件间的消息传递方式,消息发布端(组件1)在调用消息接收端(组件2)的写消息队列接口将消息发布给消息接收端后,并不知道消息是否被消息接收端正常处理,对于消息发布端而言,只是将数据写到了消息接收端的消息队列,但并不知道消息接收端是否处理了传入的数据。如果消息发布端想要知道消息接收端已处理消息,需要消息接收端再向消息发布端反馈对应的应答。尤其是消息的一对多发布中,在消息发布端将消息发布给多个消息接收端之后,消息发布端需要等待各个消息接收端返回的应答消息。对应的统计过程较繁琐,处理逻辑复杂,消息的传递效率也较低。
为了至少部分解决上述问题,在本实施例中,可以设置一个消息代理端,用于在目标设备的不同组件之间传递消息。由消息代理端进行消息的代理发布,如果消息发布端需要知道是否所有的消息接收端都获取并处理完毕消息,可以由消息代理端进行发布结果的统计,并将消息是否已发布给所有消息接收端的发布结果反馈给消息发布端。消息代理端进行消息的代理发布,可以是基于订阅和发布方式完成的,消息接收端即为订阅消息的消息订阅组件,对应的消息发布端即为消息发布组件。这里,消息发布组件可以是特定消息类型的消息发布者,可以称为消息发布组件、发布者、发布方等,消息订阅组件可以是特定消息类型的消息接收者,可以是特定消息类型的订阅者,可以称为消息订阅组件、订阅者、订阅方等。消息代理端也称为消息传递组件、发布订阅组件等。
需要说明的是,消息接收端可以是独立的组件,也可以是依托于某个RTE环境(Run-Time Environment,运行时环境)的组件,RTE环境是指一段代码将要被执行时的一个特定的、独立的上下文环境,等同于一个独立线程。消息传递组件是不同于消息发布端和消息接收端的组件。在进行消息代理发布时,在获取到发布到消息传递组件的消息时,消息传递组件可以检索消息类型并发送到RTE环境执行的过程,如果没有RTE环境,可以直接执行消息接收端注册的回调函数的过程。在进行消息订阅时,消息订阅端可以利用发布订阅组件提供的消息订阅接口,执行订阅特定消息的动作,在系统内部消息分发时,消息发布端可以通过调用发布订阅组件提供的消息发布接口,执行消息发布的动作,将待发布的消息发布至消息传递组件,由消息传递组件完成分发和消息传递过程。
消息传递组件对消息进行的代理发布的过程,可以是检索消息类型并发送到RTE环境执行的过程,如果没有RTE环境,可以直接执行消息接收组件注册的回调函数的过程。这里,回调函数可以是消息处理函数,消息相关内容可以以参数的形式传入该函数。在代理发布消息时对函数的调用和执行,可以实现消息接收组件获取对应消息,并做出相应的业务逻辑处理。回调函数的参数,即消息处理函数的参数,可以是消息订阅组件自定义确定的,由消息订阅组件按需选择用还是不用,如果有传入此参数,消息传递组件可以在调用消息处理函数时,将此参数带入,以满足消息订阅组件的特殊需求。在进行消息订阅时,消息订阅组件可以利用消息传递组件提供的消息订阅接口,执行订阅特定消息的动作,在系统内部消息分发时,消息发布组件可以利用消息传递组件提供的消息发布接口,执行消息发布的动作,由消息传递组件完成分发和消息传递过程。
在本实施例中,通过目标设备的消息传递组件可以获取目标设备的消息发布组件所发布的目标发布消息。这里,目标发布消息可以是第一组件发布的特定消息类型的消息,可以用于触发消息接收组件执行对应的业务,可以是消息发布组件通过调用消息传递组件的消息发布接口发布至消息传递组件的消息。
可选地,消息发布组件可以通过调用消息传递组件的消息发布接口,输入对应的参数数据,以完成将目标发布消息发布至消息传递组件。这里的参数数据可以包括:消息的类型,消息体内容,消息体长度等。消息的类型可以为消息标识,即消息ID(Identifier,标识),其可以是根据具体的业务逻辑需要定义出来的一个msg_id(message identitydocument,消息事件号)。消息体可以对应于消息数据(即,发布内容),可以是消息传递需求中,需要传递的结构化的消息内容,对应地,消息体长度是在需要传递消息体时所填写的要传递的消息数据的数据长度(不需要传递消息体可以填0)。消息体内容和消息体长度可以是可选项,由消息发布组件在需要传递结构化消息的场景下填写的内容。
步骤S204,根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件。
在系统内部可以基于消息标识进行消息传递,即,消息传递组件可以基于消息标识进行消息的分发与传递。目标设备上的组件可以通过消息标识订阅所关注的消息。为了方便消息传递组件进行消息分发,可以预先保存消息订阅信息,这里的消息订阅信息用于通过消息标识与组件标识之间的对应关系来表征消息标识所标识的发布消息的消息订阅组件,其可以是通过保存消息标识与组件标识之间的对应关系实现的。上述消息订阅信息可以保存在消息传递组件中,也可以保存在消息传递组件之外的其他存储资源中,但对应的存储资源的地址信息可以保存在消息传递组件中,以保证消息传递组件可以对保存的消息订阅信息进行查找。
在本实施例中,在接收到目标发布消息之后,消息传递组件可以根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件。确定目标设备中是否存在订阅目标发布消息的消息订阅组件的方式可以是:使用目标发布消息的消息标识查找已保存的消息订阅信息,在查找到与目标发布消息的消息标识对应的组件标识的情况下,可以确定存在订阅了目标发布消息的消息订阅组件,并可以将查找到的组件标识所标识的组件,确定为订阅了目标发布消息的消息订阅组件。
步骤S206,在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件。
如果消息发布组件想要知道目标消息已发布给了所有的消息传递组件,消息发布组件可以在发布目标发布消息至消息传递组件的过程中,在输入的参数数据中增加用于指示将目标发布消息的发布结果反馈给消息发布组件的指示信息,其可以是消息发布组件注册的发布应答处理回调和对应的发布应答回调参数。发布应答处理回调是按照消息发布组件的业务逻辑需求进行填写的。如果消息发布组件想要知道消息代理端(消息传递组件)是否将消息发布给了所有消息订阅组件这个事件,消息发布组件可以通过注册这个发布应答回调知道,在规定时间内这个消息是否已经被分发与传递到了所有的消息订阅组件。消息发布组件可以按照自己的业务逻辑需求选择是否使用并填写发布应答回调参数。如果填写了发布应答回调参数,发布应答回调参数可以在消息发布完成分发传递后调用发布应答回调时或者分发传递超时时,以函数参数的方式传入。
对于目标发布消息,在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,可以通过消息传递组件将目标发布消息分发(与传递)给订阅了目标发布消息的每个消息订阅组件。在目标发布消息的消息订阅组件的数量为多个的情况下,消息传递组件可以将目标发布消息分别传递给每个消息订阅组件。向不同的消息订阅组件传递目标发布消息的过程可以是并行执行的,也可以是串行执行的(即,依次向各个组件分发目标发布消息),本实施例中对此不做限定。
在向消息订阅组件传递目标发布消息时,如果对应的消息订阅组件中存在RTE环境,可以由消息订阅组件的RTE环境执行目标发布消息的分发,如果不存在RTE环境,可以由消息传递组件直接执行目标发布消息的分发。此外,在RTE环境执行目标发布消息的分发的过程中,消息传递组件可以执行其他操作,例如,接收其他组件发布的消息、根据消息对应的消息标识确定订阅消息的组件等工作。
上述将目标发布消息的分发至消息订阅组件的过程,可以是由上述RTE环境或消息传递组件执行消息处理函数的过程。由于消息处理函数的参数是各个消息传递组件根据自身的业务逻辑需求在订阅对应消息时注册到消息传递组件的,在代理发布过程中,调用执行对应的消息处理函数,即完成了将目标发布消息向对应的消息订阅组件的分发;同样地,通过消息订阅组件的消息处理函数对目标发布消息进行处理之后,即可以表示该消息订阅组件接收并处理了目标发布消息。目标发布消息的发布结果即为是否目标发布消息已发布给了所有的消息订阅组件的结果。
步骤S208,根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件。
对于发布结果的统计,可以预先设定一个时间,作为消息发布端本次消息发布后等待应答结果的最大时间,即发布后等待应答处理回调的超时时间,其可以是消息发布端由规定的,也可以采用默认值。在预设时间到达之前,如果目标发布消息已发布给了目标发布消息的所有消息订阅组件,可以直接反馈第一发布结果至消息发布组件,第一发布结果用于指示目标发布消息已发布给了目标发布消息的所有消息订阅组件;在预设时间到达时,如果还有目标发布消息未分发给的消息订阅组件,也可以停止代理发布和统计,并反馈第一发布结果至消息发布组件,第一发布结果用于指示目标发布消息未发布给目标发布消息的所有消息订阅组件,以在较短的时间内快速确定发布结果,可以及时释放对应的资源,并针对发布结果及时作出对应的策略调整。每次代理发布过程中,预设时间的到达,可以由定时器进行统计。定时器可以是在确定订阅信息后创建的,可以在根据订阅信息开始进行目标发布消息的分发时,启动定时器。
可选地,第一发布结果还可以用于指示目标发布消息已发布给的消息订阅组件和未发布给的消息订阅组件。由于每个消息订阅组件的订阅信息是已知的,因此,可以确定出哪些组件订阅了目标发布消息,从而可以统计出预设时间内目标发布消息已发布给的消息订阅组件和未发布给的消息订阅组件。考虑到本实施例中通过消息传递组件进行消息发布组件和消息订阅组件的解耦,消息发布组件通常不关心订阅了其所发布的消息的组件,因此,也可以通过第一发布结果仅指示目标发布消息是否发布给了所有的消息订阅组件,也不指示目标发布消息向各个消息订阅组件的发布结果。
通过上述步骤S202至步骤S208,通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息;根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件;根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件,解决了相关技术中的组件间的消息传递方式存在由于消息发送端需要分别向各个消息接收端发送消息并等待各个消息接收端的应答消息导致的组件的处理逻辑复杂、消息传递的效率低的问题,简化了组件的处理逻辑,并提高了消息传递的效率。
在一个示例性实施例中,根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件,包括:
S11,使用目标消息标识查找订阅表,其中,订阅表用于记录已订阅消息的消息标识和与已订阅消息的消息标识对应的信息链表的表头地址之间的映射关系,与已订阅消息的消息标识对应的信息链表用于存储与已订阅消息的消息订阅组件对应的订阅信息;
S12,在订阅表中查找到与目标消息标识对应的信息链表的表头地址的情况下,确定目标设备中存在订阅了目标发布消息的消息订阅组件;
S13,在订阅表中未查找到与目标消息标识对应的信息链表的表头地址的情况下,确定目标设备中不存在订阅了目标发布消息的消息订阅组件。
在本实施例中,为了提高消息订阅组件确定的便捷性,各个消息标识对应的订阅信息可以以信息链表的形式进行记录,不同的消息标识所对应的订阅信息可以通过不同的信息链表记录,这里,消息标识对应的订阅信息是指订阅了消息标识所标识的消息的组件对应的订阅信息。在信息链表中,可以存储与已订阅消息的消息订阅组件对应的订阅信息,同一消息的消息订阅组件对应的订阅信息可以存储在同一信息链表中。已订阅消息的消息标识和与已订阅消息的消息标识对应的信息链表的表头地址之间的映射关系可以记录在订阅表中。这里映射关系可以是将消息标识和对应的信息链表的表头地址进行哈希映射后得到的关系。
可选地,在接收到目标发布消息之后,即,消息传递组件的发布接口被触发后,可以先判定订阅表的有效性,在订阅表无效的情况下,可以退出发布流程,在订阅表有效的情况下,可以继续进行发布流程,对订阅表进行查找等。这里,订阅表的有效性是指订阅表是否处于有效状态或者可用状态,可以表示订阅表中是否记录有已订阅消息的消息标识和与已订阅消息的消息标识对应的信息链表的表头地址之间的映射关系,或者,订阅表中记录的映射关系是否可以被读取到。
目标发布消息的消息标识为目标消息标识,可以使用目标消息标识对订阅表进行查找。在查找到与目标消息标识对应的信息链表的表头地址的情况下,可以确定目标设备中存在订阅了目标发布消息的消息订阅组件。在订阅表中未查找到与目标消息标识对应的信息链表的表头地址的情况下,可以确定目标设备中不存在订阅了目标发布消息的消息订阅组件。
可选地,在查找到与目标消息标识对应的信息链表的表头地址的情况下,可以根据订阅表中记录的信息链表的表头地址,确定信息链表的表头位置,并通过遍历该信息链表中的链表节点确定订阅了目标发布消息的消息订阅组件,这里,信息链表中的一个链表节点用于记录与订阅了目标消息标识所标识的发布消息的一个消息订阅组件对应的订阅信息。此外,为了避免信息链表为空的情况,可以在查找到与目标消息标识对应的信息链表的表头地址之后,确定查找到的信息链表的深度;如果深度不为零,可以确定目标设备中存在订阅了目标发布消息的消息订阅组件;否则(未查找到信息链表的表头地址、或者查找到信息链表的表头地址但查找到信息链表的深度为零),确定目标设备中不存在订阅了目标发布消息的消息订阅组件。
可选地,在确定存在订阅了目标发布消息的消息订阅组件的情况下,可以进行相关的数据处理和消息分发。在确定不存在订阅了目标发布消息的消息订阅组件的情况下,可以停止对目标发布消息进行其他操作,也可以将不存在订阅了目标发布消息的消息订阅组件的结果反馈给消息发布组件。
例如,以消息标识为msg_id为例,判定msg_id是否在订阅表中,如果不在,表示要代理发布的此消息没有订阅者(消息订阅组件,或称订阅方)。如果发布结果需要应答给发布者(消息发布组件,或称发布方),将发布应答结果改为”无人订阅”,调用应答回调通知发布结果;释放必要资源结束发布。如果不需要应答,释放必要资源后结束发布。
通过本实施例,通过记录消息标识和存储订阅信息的信息链表的表头地址之间的映射关系的订阅表,确定是否存在订阅了发布消息的消息订阅组件,可以提高查找和确定订阅信息的效率。
在一个示例性实施例中,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件,包括:
S21,在预设时间内,通过消息传递组件为每个消息订阅组件执行以下消息传递操作,以将目标发布消息传递给每个消息订阅组件,其中,在执行以下消息传递操作的过程中,每个消息订阅组件为当前订阅组件:
注册与当前订阅组件对应的执行函数体和与执行函数体对应的应答函数体,其中,执行函数体包含当前订阅组件注册的消息处理函数,执行函数体的参数包括目标发布消息中的发布信息;
依次执行执行函数体和应答函数体,其中,执行函数体用于按照消息处理函数对目标发布消息中的发布信息进行处理,应答函数体用于在执行函数体执行完成之后,将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识。
在本实施例中,在接收到目标发布消息之后,可以在预设时间内将目标发布消息传递给目标发布消息的消息订阅组件。对于每个消息订阅组件,通过消息传递组件为每个消息订阅组件执行的消息传递操作可以包括:注册当前订阅组件对应的执行函数体(job)和与执行函数体对应的应答函数体(joback);依次执行上述执行函数体和应答函数体。在执行消息传递操作的过程中,每个消息订阅组件为当前订阅组件。
对于当前订阅组件(当前目标发布消息要传递给的消息订阅组件),上述执行函数体可以包含当前订阅组件注册的消息处理函数,可以用于按照消息处理函数对目标发布消息中的发布信息进行处理,执行函数体的参数可以包括目标发布消息中的发布信息(可以是消息体中的发布内容)。由于消息处理函数是由消息订阅组件注册的,其可以用于对目标发布消息执行消息订阅组件所需的处理操作,即,相当于相关技术中在将发布消息写入到消息订阅组件的消息队列之后,消息订阅组件从消息队列读取出目标发布消息之后对目标发布消息所进行的处理操作,执行函数体中的消息处理函数执行完毕,相当于目标发布消息已传递给消息订阅组件并执行完消息订阅组件所需的处理操作。
可选地,上述消息传递操作可以是在确定所有订阅了目标发布消息的消息订阅组件的订阅信息之后进行的;也可以是在确定部分订阅了目标发布消息的消息订阅组件的订阅信息后进行的,此时,目标发布消息的传递过程与消息订阅组件的订阅信息可以是并行执行,也可以是串行执行的。
在执行函数体执行完成之后,可以执行对应的应答函数体,以将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识,在应答函数体中包含了发布统计函数,还发布统计函数可以用于指示上述将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识的操作。由于目标发布消息的所有消息订阅组件是已知的,因此,可以为每个消息订阅组件设置对应的发布指示标识。可以基于预设时间内是否所有的发布指示标识已调整为发布完成的指示标识来确定预设时间内目标发布消息已发布给了所有的消息订阅组件。
通过本实施例,通过注册执行函数体和对应的应答函数体完成对发布消息的传递和发布结果的统计,可以提高消息传递的效率。
在一个示例性实施例中,依次执行执行函数体和应答函数体,包括:
S31,在当前订阅组件的运行时环境有效的情况下,通过调用当前订阅组件的运行时环境的接口将执行函数体和应答函数体传入当前订阅组件的运行时环境,以由当前订阅组件的运行时环境依次执行执行函数体和应答函数体;
S32,在当前订阅组件的运行时环境无效的情况下,由消息传递组件的运行时环境代理执行执行函数体和应答函数体。
对于执行函数体和应答函数体的执行,在当前订阅组件的运行时环境(即,RTE环境)有效的情况下,可以由消息订阅组件的运行时环境执行执行函数体和应答函数体,在当前订阅组件的运行时环境无效的情况下,可以由消息传递组件的运行时环境代理执行执行函数体和应答函数体。
在本实施例中,在当前订阅组件的运行时环境有效的情况下,可以通过调用当前订阅组件的运行时环境的接口将执行函数体和应答函数体传入当前订阅组件的运行时环境,以由当前订阅组件的运行时环境依次执行执行函数体和应答函数体。
可选地,在由当前订阅组件的运行时环境依次执行执行函数体和应答函数体的过程中,消息传递组件可以继续执行其他的操作,例如,可以继续进行与订阅了目标发布消息的消息订阅组件对应的订阅信息的查找、或者进行其他的消息接收、代理发布等操作。这里,当前订阅组件的运行时环境可以是在当前订阅组件订阅目标消息标识所标识的发布消息时指定的,如果未指定,则可以认为当前订阅组件的运行时环境无效。
例如,判定消息订阅组件的RTE环境是否有效,如果有效,可以注册一个执行体job和注册一个执行体的应答joback。将job和joback通过调用RTE环境的接口让RTE环境去执行job和joback。在RTE环境执行job是个异步处理过程,相当于将要发布的消息做了一个副本完整的交给了RTE环境的上下文中去执行消息处理函数,消息传递组件让RTE环境开始执行job后即可进行循环遍历(这里的遍历可以包括遍历信息链表中的链表节点),而RTE环境在执行完执行体job中的消息处理函数,会调用joback函数(即,发布统计函数),以进行发布结果的统计。
在本实施例中,在当前订阅组件的运行时环境无效的情况下,可以继续确定当前订阅组件的消息处理函数是否有效,在对应的消息处理函数有效的情况下,可以由消息传递组件的运行时环境代理执行执行函数体和应答函数体。
例如,如果当前消息订阅组件的RTE环境判定为无效的,则继续判断当前消息订阅组件的消息处理函数的有效性,无效则继续循环遍历。如果当前消息订阅组件的消息处理函数是有效的,则由消息传递组件代理执行消息处理函数。
通过本实施例,通过使用运行时环境执行消息的分发和发布结果的统计,可以为同时处理其他消息的接收和分发,从而提高消息处理的效率。
在一个示例性实施例中,依次执行执行函数体和应答函数体,包括:
S41,将目标发布消息中的发布信息以及当前订阅组件所指定的参数传入执行函数体,以执行执行函数体;
S42,在执行函数体执行完成之后,触发执行应答函数体,以将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识。
在本实施例中,执行上述执行函数体的过程可以是:将目标发布消息中的发布信息以及当前订阅组件所指定的参数传入执行函数体。这里,消息订阅组件在进行消息订阅时,可以执行消息处理函数的参数,其可以是消息订阅组件自定义使用的函数,消息订阅组件可以按需选择用还是不用。如果有传入此参数,消息传递组件可以在调用消息处理函数时,将此参数带入,以满足消息订阅组件的特殊需求。
在执行函数体执行完成之后,可以触发执行应答函数体,以将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识。这里的指示标识可以用于指示目标发布消息是否已发布给了当前订阅组件,可以用比特位进行表示。当前订阅组件对应的发布指示标识在执行函数体执行完毕前后,可以有明显的区别,以区分目标发布消息是否已发布给了当前订阅组件。
可选地,消息传递组件可以确定与订阅了目标发布消息的每个消息订阅组件对应的订阅信息,还可以为每个消息订阅组件设置一个对应的索引值(index),用索引值区分本次发布遍历到第几个消息订阅组件。同时,可以申请一段内存对索引值进行缓存。在该内存中,可以同时设置有索引值对应的发布指示标识。该内存,即缓存发布索引的内存,可以用于统计发布结果。在统计发布结果时,可以根据各个消息订阅组件的发布指示标识来确定目标发布消息已发布给了所有的消息订阅组件。
例如,可以遍历订阅者链表uhos_list_t(即,上述信息链表),逐个拿到订阅者信息,索引值(index)自加。此外,还可以申请一段内存用于缓存发布索引,用于统计发布结果。
通过本实施例,将发布内容以及消息订阅组件所指定的参数传入执行函数体,已按照消息订阅组件所执行的参数对发布内容进行处理,可以满足不同消息订阅组件的处理需求,可以提高发布消息处理的灵活性。
在一个示例性实施例中,依次执行执行函数体和应答函数体,包括:
S51,执行执行函数体,以按照消息处理函数对目标发布消息中的发布信息进行处理;
S52,在执行函数体执行完成之后,触发执行应答函数体,以将发布统计结果中与当前订阅组件对应的比特位的值由第一值调整为第二值,其中,发布统计结果中的一个比特位对应于目标发布消息的一个消息订阅组件,第一值用于指示目标发布消息未发布给对应的消息订阅组件,第二值用于指示目标发布消息已发布给了对应的消息订阅组件。
执行函数体的执行过程可以是:将目标发布消息中的发布信息传入执行函数体,执行上述执行函数体,以按照消息处理函数对目标发布消息中的发布信息进行处理。此外,传入执行函数体的参数还可以包含消息订阅组件所指定的参数。在执行函数体执行完成之后,可以触发执行应答函数体。
在本实施例中,可以通过该发布统计结果中的不同比特位统计不同消息订阅组件的发布结果,即,发布统计结果中的一个比特位对应于目标发布消息的一个消息订阅组件,一个比特位通常具有两个值(0和1),其中,两个值中的第一值(0或者1)用于指示目标发布消息未发布给对应的消息订阅组件,两个值中的第二值(1或者0)用于指示目标发布消息已发布给了对应的消息订阅组件。为了便于区别,可以将第一值设置为1,第二值设置为0。
通过本实施例,通过执行应答函数体,将发布统计结果中与当前订阅组件对应的比特位的值由第一值调整为第二值,可以便于对发布结果的统计,提高发布结果统计的效率。
在一个示例性实施例中,在触发执行应答函数体之后,上述方法还包括:
S61,根据目标发布消息的目标序列号在发布表中查找与目标序列号对应的发布句柄,其中,目标序列号用于唯一标识目标发布消息的发布流程,发布表用于记录发布消息的序列号和发布消息的发布句柄之间的映射关系,发布句柄用于指示对应的发布消息的内存地址;
S62,在查找到与目标发布消息对应的目标发布句柄的情况下,跳转至目标发布句柄所关联的目标内存指针所指向的内存,得到发布统计结果,其中,目标内存指针为存储发布统计结果的内存的指针;
S63,根据当前订阅组件所对应的当前索引值,将发布统计结果中与当前索引值对应的比特位的值由第一值调整为第二值,其中,当前索引值用于表示与当前索引值对应的比特位在发布统计结果中的位置;其中,应答函数体的参数包括目标序列号和当前索引值。
为了便于对发布结果进行统计,避免将不同发布过程的发布结果混合,每次发布过程都可以产生一个唯一的序列号(Serial Number),即,发布应答关联SN号,用于区别前后发布的调用。SN号可以贯穿一次发布过程的全周期,在一次发布过程完成或发布超时完成后,SN号可以伴随相关资源的释放而释放。
发布消息的序列号可以是在获取到消息发布组件发布的发布消息之后产生的,也可以是在确定有组件订阅了发布消息之后产生的,还可以是在其他时机生成的。此外,对于接收到的发布消息,可以申请一段内存缓存发布消息,得到一个发布句柄(uh_publish_handler_t),得到的发布句柄可以指示对应的发布消息缓存的内存地址。
对于目标发布消息,为其产生的序列号为目标序列号,目标发布消息的发布句柄可以是与目标序列号对应的发布句柄,即,目标发布句柄。在根据目标消息标识确定目标设备中存在订阅了目标发布消息的消息订阅组件的情况下,可以将产生的目标序列号与目标发布句柄进行映射,并在发布表中记录目标序列号和目标发布句柄之间的映射关系。
这里,发布表中可以记录发布消息的序列号和发布消息的发布句柄之间的映射关系,可以在发布过程保证发布过程的完整性。每次发布的过程会产生一个唯一的序列号SN,在发布开始时,可以利用SN和当前要发布的内容的发布句柄做一次映射,在发布完毕和/或发布超时后解除映射关系。在消息发布接口被触发后,可以先判定订阅表和发布表的有效性,两者均有效时,可以执行后续的发布过程,否则,任何一个无效则退出发布过程。
可选地,对于上述通过订阅表记录已订阅消息的消息标识和与已订阅消息的消息标识对应的信息链表的表头地址之间的映射关系的场景,可以在订阅表中查找到与目标消息标识对应的信息链表的表头地址的情况下,产生上述目标序列号(目标序列号也可以是在接收到目标发布消息、或者判定订阅表和发布表均有效时产生),并将其和对应的发布句柄映射到发布表中(可以通过key-value的形式保存,其中,key为消息标识,value为发布句柄)。
例如,在订阅表和发布表均有效时,判定msg_id是否在订阅表中,如果表中存在此msg_id的映射,即此消息有订阅者,可以产生一个唯一SN,并将其和发布句柄uh_publish_handler_t映射到发布表。
在订阅表中查找到目标消息标识对应的信息链表的表头地址的情况下,可以将查找到的表头地址赋值给目标发布句柄关联的订阅信息。由于可以根据信息链表的表头地址查找到每个消息订阅组件对应的订阅信息,从而确定相关的消息处理函数,赋值完成后可以代理进行消息的分发和传递。此外,还可以创建一个定时器,并将其赋值给发布句柄,定时器的定时时间为上述预设时间,并启动定时器。在对发布结果进行统计的过程中,在确定预设时间内将目标发布消息分发给所有消息订阅组件的情况下,可以利用目标发布句柄停止定时器,同时,在定时器超时时,也可以基于与目标发布句柄之间的对应关系确定要停止的发布流程。对于前述申请的统计发布结果的内存,可以将内存的指针关联到发布句柄,并将各个索引值(index)对应的统计结果的bit位置为第一值(例如,1)。这里的赋值可以是在发布表中通过指针指向对应的对象的内存地址,例如,表头地址、定时器的内存地址等。
例如,根据msg_id查订阅表,获取到信息链表的链表头uhos_list_t,将其赋值给发布句柄关联的订阅信息(赋值给uh_publish_handler_t->m_list_subcribe),此为要消息代理端进行消息分发和传递的目的信息,相关消息处理函数都在此表头中。
可选地,应答函数体的参数可以包括目标序列号和当前消息订阅组件的索引值,即,当前索引值。在执行应答函数体的过程中,可以根据目标发布消息的目标序列号在发布表中查找与目标序列号对应的发布句柄。这里,目标序列号可以是用于唯一标识目标发布消息的发布流程的序列号。在查找到与目标发布消息对应的目标发布句柄的情况下,可以跳转至目标发布句柄所关联的目标内存指针所指向的内存,得到发布统计结果。这里,目标内存指针可以为存储发布统计结果的内存的指针,即,前述缓存发布索引的内存。每个索引值可以对应于发布统计结果中的一个比特位,可以将将发布统计结果中与当前索引值对应的比特位的值由第一值调整为第二值。这里,当前索引值可以用于表示与当前索引值对应的比特位在发布统计结果中的位置。
例如,以由RTE环境执行应答函数体joback为例,如图3所示,RTE环境调用joback触发,应答统计处理流程开始。利用joback的参数中的SN反查发布句柄,根据joback参数中的索引值修改发布句柄统计结果,将对应的比特位清零。
通过本实施例,在执行应答函数体的过程中,通过序列号确定发布句柄,在根据发布句柄关联的信息确定记录发布统计结果的地址,可以提高发布统计结果的准确性。
在一个示例性实施例中,上述方法还包括:
S71,依次遍历与目标消息标识对应的目标信息链表的每个链表节点,得到与每个消息订阅组件对应的订阅信息、以及与每个消息订阅组件对应的索引值,其中,每个链表节点中存储有与目标消息标识所标识的消息的一个消息订阅组件对应的订阅信息,与每个消息订阅组件对应的索引值是根据每个消息订阅组件遍历到的顺序生成的。
对于索引值的确定,可以是在依次遍历与消息标识对应的信息链表,得到与每个消息订阅组件对应的订阅信息的情况下确定的。与每个消息订阅组件对应的索引值可以是根据每个消息订阅组件遍历到的顺序生成的。与目标消息标识对应的信息链表为目标信息链表,可以依次遍历目标信息链表中的每个链表节点,得到与每个消息订阅组件对应的订阅信息、以及与每个消息订阅组件对应的索引值。这里,每个链表节点中可以存储有与目标消息标识所标识的消息的一个消息订阅组件对应的订阅信息。不同的链表节点所存储的订阅信息至少部分不同,即,可以部分相同但不完全相同。发布统计结果中的比特位数可以是根据消息订阅组件的索引值所配置的,即,索引值如果加1,则发布统计结果中的比特位数也加1。
例如,根据遍历顺序,将每个遍历到的消息订阅组件设置一个对应的索引值,用索引值区分本次发布遍历到第几个消息订阅组件。索引值可以自加,第一个遍历到的消息订阅组件的索引值可以为0,则第二个遍历到的消息订阅组件的索引值为1,第三个遍历到的消息订阅组件的索引值为2,以此类推……
通过本实施例,根据确定消息订阅组件的顺序确定消息订阅组件的索引值,可以避免因消息订阅组件过多而出现比特位修改错误的情况,从而提高发布统计结果的准确性。
在一个示例性实施例中,在触发执行应答函数体之后,上述方法还包括:
S81,在发布统计结果中的所有比特位均为第二值的情况下,确定目标发布消息已发布给了目标发布消息的所有消息订阅组件;
S82,在发布统计结果中的至少部分比特位为第一值的情况下,确定目标发布消息未发布给目标发布消息的至少部分消息订阅组件。
在本实施例中,根据发布统计结果中的所有比特位的值,可以确定目标发布消息是否已发布给了目标发布消息的所有消息订阅组件。在发布统计结果中的所有比特位均为第二值的情况下,可以确定目标发布消息已发布给了目标发布消息的所有消息订阅组件。在发布统计结果中的至少部分比特位为第一值的情况下,可以确定目标发布消息未发布给目标发布消息的至少部分消息订阅组件。
在每次触发执行应答函数体之后,均可以执行一次发布统计结果的判定过程。比如,应答函数体中的发布统计函数每次执行时均会确定发布统计结果中的所有比特位均为第二值,如果是,即使定时器未超时,也会结束发布流程。此外,如果定时器超时,及时有应答函数体未被触发,也会结束发布流程。
例如,在统计结果非全零情况下,表示未发布完毕,统计函数可以返回。在统计结果全零情况下,利用发布句柄停止定时器,
可选地,对于比特位的第一值为1,第二值为0的情况,如图3所示,在触发joback将统计结果中对应的比特位清零之后,遍历统计结果是否全零。在发布统计结果全零时,可以确定目标发布消息发布完毕,已订阅目标发布消息的所有消息订阅组件均接收并处理了目标发布消息,可以利用发布句柄停止定时器。如果发布应答接口有效(即,发布者关注发布结果)时,可以调用发布应答接口,将发布结果反馈给发布者,释放资源,解除发布SN关联的映射关系,并释放发布句柄。在发布统计结果非全零时,标识未发布完毕,发布统计函数可以返回。
通过本实施例,在每次执行应答函数体之后通过确定发布统计结果中所有的比特位的值判断发布消息是否发布给了所有的消息订阅组件,可以提高发布消息的发布结果的效率。
在一个示例性实施例中,在根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件之后,上述方法还包括:
S91,在确定目标设备中不存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件向消息发布组件反馈第二发布结果,其中,第二发布结果用于指示目标设备中没有组件订阅目标发布消息。
在本实施例中,对于根据接收到的目标发布消息,确定目标设备中不存在订阅了目标发布消息的消息订阅组件的情况,如果消息发布组件未指示将目标发布消息的发布结果反馈给消息发布组件,则可以直接结束发布流程。如果消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件,可以通过消息传递组件向消息发布组件反馈第二发布结果。这里,第二发布结果用于指示目标设备中没有组件订阅目标发布消息。
例如,如图4所示,消息发布组件可以通过调用消息发布接口传入待发布的消息,消息的相关参数可以包括:uh_msg_id_t(消息类型),msg_data(消息体),msg_data_len(消息长度),fn_publish_ack_routine(发布后应答处理回调),fn_param(回调参数),ack_fn_timeout_ms(发布后等待应答处理回调的超时时间),uh_publish_ack_sn_t(发布应答sn(调用者不可见))等。在确定订阅表、发布应答表(即,发布表)有效的情况下,可以判定msg_id是否在订阅表中,如果不在,表示要代理发布的此消息没有消息订阅组件。如果发布结果需要应答给消息发布组件,将发布应答结果改为“无人订阅”,调用应答回调通知发布结果,释放必要资源结束发布,如果不需要应答,直接释放必要资源结束发布。
通过本实施例,在确定发布消息没有消息订阅组件的情况下,将发布结果反馈至消息发布组件并结束发布,可以提高消息的传递效率。
下面结合可选示例对本申请实施例中的组件间的消息传递方法进行解释说明。在本可选示例中,消息订阅组件为订阅者,消息发布组件为发布者,消息传递组件为发布订阅组件,消息标识为msg_id,第一值为1,第二值为0。
本可选示例中提供了一种消息发布流程,发布者在消息发布时注册一个发布结果通知函数,在消息代理发布完毕后调用此函数,则可以获得消息的发布统计结果。避免了一对多传输消息时,每个订阅者都要应答处理结果,且需要发布者自己根据应答统计布统计结果的繁琐过程。
如图5所示,本可选示例中的组件间的消息传递方法的流程可以包括以下步骤:
步骤1,如果msg_id在订阅表中,将序列号和发布句柄映射到发布应答表(即,发布表)。
在消息发布接口被触发后,可以采用与图4中类似的方式判定订阅表和发布表的有效性、以及msg_id是否在订阅表中,如果不在订阅表中,执行图4中的处理流程。如果在,可以根据msg_id查找订阅表,确定消息订阅组件的链表头,并赋值给发布句柄。
步骤2,根据msg_id查找订阅表,确定消息订阅组件的链表头,赋值给发布句柄。
步骤3,创建定时器,并开启定时器,消息的分发流程从此开始。
步骤3,遍历链表,逐个确定订阅者信息(即,订阅信息)和索引值。
步骤4,注册执行体job和应答执行体joback,在RTE环境有效的情况下,通过调用RTE的接口,由RTE执行job和joback。
步骤5,在RTE环境无效的情况下,确定消息处理函数是否有效,在消息处理函数有效的情况下,由发布订阅组件执行消息处理函数,并将对应索引值结果数组中比特位清零,同时,继续遍历订阅者信息。
步骤6,在定时器的时间到达或者统计结果全零的情况下,利用发布句柄调用发布应答接口,将结果反馈给发布者,资源释放,并解除发布映射关系,释放发布句柄。
传统的通讯方式,消息发送后要确认对方是否接收到了消息,需要对方做出针对该消息的应答。通过本可选示例,消息发布后,对于发布者需要知道是否被接收处理结果的情况,可以通过发布接口注册一个结果回调通知接口即可实现,不用再关注每一个消息接收方的所有的应答,消息代理方法代理了应答统计工作,这种设计对于组件的使用者更友好,且更省资源。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM(Read-Only Memory,只读存储器)/RAM(Random Access Memory,随机存取存储器)、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本申请各个实施例的方法。
根据本申请实施例的另一个方面,还提供了一种用于实施上述组件间的消息传递方法的组件间的消息传递装置。图6是根据本申请实施例的一种可选的组件间的消息传递装置的结构框图,如图6所示,该装置可以包括:
获取单元602,用于通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息;
第一确定单元604,与获取单元602相连,用于根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;
传递单元606,与第一确定单元604相连,用于在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果应答给消息发布组件的情况下,通过消息传递组件将目标发布消息分发给订阅了目标发布消息的每个消息订阅组件;
第一反馈单元608,与传递单元606相连,用于根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件发送第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件。
需要说明的是,该实施例中的获取单元602可以用于执行上述步骤S202,该实施例中的第一确定单元604可以用于执行上述步骤S204,该实施例中的传递单元606可以用于执行上述步骤S206,该实施例中的第一反馈单元608可以用于执行上述步骤S208。
通过上述模块,通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息;根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件;根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件,解决了相关技术中的组件间的消息传递方式存在由于消息发送端需要分别向各个消息接收端发送消息并等待各个消息接收端的应答消息导致的组件的处理逻辑复杂、消息传递的效率低的问题,提高了简化了组件的处理逻辑,并提高了消息传递的效率。
在一个示例性实施例中,第一确定单元包括:
查找模块,用于使用目标消息标识查找订阅表,其中,订阅表用于记录已订阅消息的消息标识和与已订阅消息的消息标识对应的信息链表的表头地址之间的映射关系,与已订阅消息的消息标识对应的信息链表用于存储与已订阅消息的消息订阅组件对应的订阅信息;
第一确定模块,用于在订阅表中查找到与目标消息标识对应的信息链表的表头地址的情况下,确定目标设备中存在订阅了目标发布消息的消息订阅组件;
第二确定模块,用于在订阅表中未查找到与目标消息标识对应的信息链表的表头地址的情况下,确定目标设备中不存在订阅了目标发布消息的消息订阅组件。
在一个示例性实施例中,传递单元包括:
执行模块,用于在预设时间内,通过消息传递组件为每个消息订阅组件执行以下消息传递操作,以将目标发布消息传递给每个消息订阅组件,其中,在执行以下消息传递操作的过程中,每个消息订阅组件为当前订阅组件:
注册与当前订阅组件对应的执行函数体和与执行函数体对应的应答函数体,其中,执行函数体包含当前订阅组件注册的消息处理函数,执行函数体的参数包括目标发布消息中的发布信息;
依次执行执行函数体和应答函数体,其中,执行函数体用于按照消息处理函数对目标发布消息中的发布信息进行处理,应答函数体用于在执行函数体执行完成之后,将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识。
在一个示例性实施例中,执行模块包括:
第一传入子模块,用于在当前订阅组件的运行时环境有效的情况下,通过调用当前订阅组件的运行时环境的接口将执行函数体和应答函数体传入当前订阅组件的运行时环境,以由当前订阅组件的运行时环境依次执行执行函数体和应答函数体;
第一执行子模块,用于在当前订阅组件的运行时环境无效的情况下,由消息传递组件的运行时环境代理执行执行函数体和应答函数体。
在一个示例性实施例中,执行模块包括:
第二传入子模块,用于将目标发布消息中的发布信息以及当前订阅组件所指定的参数传入执行函数体,以执行执行函数体;
第二执行子模块,用于在执行函数体执行完成之后,触发执行应答函数体,以将与当前订阅组件对应的发布指示标识调整为发布完成的指示标识。
在一个示例性实施例中,执行模块包括:
第三执行子模块,用于执行执行函数体,以按照消息处理函数对目标发布消息中的发布信息进行处理;
第四执行子模块,用于在执行函数体执行完成之后,触发执行应答函数体,以将发布统计结果中与当前订阅组件对应的比特位的值由第一值调整为第二值,其中,发布统计结果中的一个比特位对应于目标发布消息的一个消息订阅组件,第一值用于指示目标发布消息未发布给对应的消息订阅组件,第二值用于指示目标发布消息已发布给了对应的消息订阅组件。
在一个示例性实施例中,上述装置还包括:
查找单元,用于在触发执行应答函数体之后,根据目标发布消息的目标序列号在发布表中查找与目标序列号对应的发布句柄,其中,目标序列号用于唯一标识目标发布消息的发布流程,发布表用于记录发布消息的序列号和发布消息的发布句柄之间的映射关系,发布句柄用于指示对应的发布消息的内存地址;
跳转单元,用于在查找到与目标发布消息对应的目标发布句柄的情况下,跳转至目标发布句柄所关联的目标内存指针所指向的内存,得到发布统计结果,其中,目标内存指针为存储发布统计结果的内存的指针;
调整单元,用于根据当前订阅组件所对应的当前索引值,将发布统计结果中与当前索引值对应的比特位的值由第一值调整为第二值,其中,当前索引值用于表示与当前索引值对应的比特位在发布统计结果中的位置;
其中,应答函数体的参数包括目标序列号和当前索引值。
在一个示例性实施例中,上述装置还包括:
遍历单元,用于依次遍历与目标消息标识对应的目标信息链表的每个链表节点,得到与每个消息订阅组件对应的订阅信息、以及与每个消息订阅组件对应的索引值,其中,每个链表节点中存储有与目标消息标识所标识的消息的一个消息订阅组件对应的订阅信息,与每个消息订阅组件对应的索引值是根据每个消息订阅组件遍历到的顺序生成的。
在一个示例性实施例中,上述装置还包括:
第二确定单元,用于在触发执行应答函数体之后,在发布统计结果中的所有比特位均为第二值的情况下,确定目标发布消息已发布给了目标发布消息的所有消息订阅组件;
第三确定单元,用于在发布统计结果中的至少部分比特位为第一值的情况下,确定目标发布消息未发布给目标发布消息的至少部分消息订阅组件。
在一个示例性实施例中,在根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件之后,上述装置还包括:
第二反馈单元,用于在根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件之后,在确定目标设备中不存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件向消息发布组件反馈第二发布结果,其中,第二发布结果用于指示目标设备中没有组件订阅目标发布消息。
此处需要说明的是,上述模块与对应的步骤所实现的示例和应用场景相同,但不限于上述实施例所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在如图1所示的硬件环境中,可以通过软件实现,也可以通过硬件实现,其中,硬件环境包括网络环境。
根据本申请实施例的又一个方面,还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于执行本申请实施例中上述任一项组件间的消息传递方法的程序代码。
可选地,在本实施例中,上述存储介质可以位于上述实施例所示的网络中的多个网络设备中的至少一个网络设备上。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:
S1,通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息;
S2,根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;
S3,在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件;
S4,根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例中对此不再赘述。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
根据本申请实施例的又一个方面,还提供了一种用于实施上述组件间的消息传递方法的电子装置,该电子装置可以是服务器、终端、或者其组合。
图7是根据本申请实施例的一种可选的电子装置的结构框图,如图7所示,包括处理器702、通信接口704、存储器706和通信总线708,其中,处理器702、通信接口704和存储器706通过通信总线708完成相互间的通信,其中,
存储器706,用于存储计算机程序;
处理器702,用于执行存储器706上所存放的计算机程序时,实现如下步骤:
S1,通过目标设备的消息传递组件获取目标设备的消息发布组件所发布的目标发布消息,其中,消息传递组件用于在目标设备的不同组件之间传递消息;
S2,根据目标发布消息的目标消息标识,确定目标设备中是否存在订阅了目标发布消息的消息订阅组件;
S3,在确定目标设备中存在订阅了目标发布消息的消息订阅组件、且消息发布组件指示将目标发布消息的发布结果反馈给消息发布组件的情况下,通过消息传递组件将目标发布消息传递给订阅了目标发布消息的每个消息订阅组件;
S4,根据在预设时间内目标发布消息已发布给的消息订阅组件,向消息发布组件反馈第一发布结果,其中,第一发布结果用于指示目标发布消息是否已发布给了目标发布消息的所有消息订阅组件。
可选地,通信总线可以是PCI(Peripheral Component Interconnect,外设部件互连标准)总线、或EISA(Extended Industry Standard Architecture,扩展工业标准结构)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图7中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口用于上述电子装置与其他设备之间的通信。
存储器可以包括RAM,也可以包括非易失性存储器(non-volatile memory),例如,至少一个磁盘存储器。可选地,存储器还可以是至少一个位于远离前述处理器的存储装置。
作为一种示例,上述存储器706中可以但不限于包括上述组件间的消息传递装置中的获取单元602、第一确定单元604、传递单元606和第一反馈单元608。此外,还可以包括但不限于上述组件间的消息传递装置中的其他模块单元,本示例中不再赘述。
上述处理器可以是通用处理器,可以包含但不限于:CPU(Central ProcessingUnit,中央处理器)、NP(Network Processor,网络处理器)等;还可以是DSP(DigitalSignal Processing,数字信号处理器)、ASIC(Application Specific IntegratedCircuit,专用集成电路)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
可选地,本实施例中的具体示例可以参考上述实施例中所描述的示例,本实施例在此不再赘述。
本领域普通技术人员可以理解,图7所示的结构仅为示意,实施上述组件间的消息传递方法的设备可以是终端设备,该终端设备可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(Mobile Internet Devices,MID)、PAD等终端设备。图7其并不对上述电子装置的结构造成限定。例如,电子装置还可包括比图7中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图7所示的不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、ROM、RAM、磁盘或光盘等。
上述本申请实施例序号仅仅为了描述,不代表实施例的优劣。
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。
在本申请的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例中所提供的方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以至少两个单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
以上所述仅是本申请的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本申请的保护范围。
Claims (13)
1.一种组件间的消息传递方法,其特征在于,包括:
通过目标设备的消息传递组件获取所述目标设备的消息发布组件所发布的目标发布消息,其中,所述消息传递组件用于在所述目标设备的不同组件之间传递消息;
根据所述目标发布消息的目标消息标识,确定所述目标设备中是否存在订阅了所述目标发布消息的消息订阅组件;
在确定所述目标设备中存在订阅了所述目标发布消息的消息订阅组件、且所述消息发布组件指示将所述目标发布消息的发布结果反馈给所述消息发布组件的情况下,通过所述消息传递组件将所述目标发布消息传递给订阅了所述目标发布消息的每个消息订阅组件;
根据在预设时间内所述目标发布消息已发布给的消息订阅组件,向所述消息发布组件反馈第一发布结果,其中,所述第一发布结果用于指示所述目标发布消息是否已发布给了所述目标发布消息的所有消息订阅组件。
2.根据权利要求1所述的方法,其特征在于,所述根据所述目标发布消息的目标消息标识,确定所述目标设备中是否存在订阅了所述目标发布消息的消息订阅组件,包括:
使用所述目标消息标识查找订阅表,其中,所述订阅表用于记录已订阅消息的消息标识和与所述已订阅消息的消息标识对应的信息链表的表头地址之间的映射关系,与所述已订阅消息的消息标识对应的信息链表用于存储与所述已订阅消息的消息订阅组件对应的订阅信息;
在所述订阅表中查找到与所述目标消息标识对应的信息链表的表头地址的情况下,确定所述目标设备中存在订阅了所述目标发布消息的消息订阅组件;
在所述订阅表中未查找到与所述目标消息标识对应的信息链表的表头地址的情况下,确定所述目标设备中不存在订阅了所述目标发布消息的消息订阅组件。
3.根据权利要求1所述的方法,其特征在于,所述通过所述消息传递组件将所述目标发布消息传递给订阅了所述目标发布消息的每个消息订阅组件,包括:
在所述预设时间内,通过所述消息传递组件为所述每个消息订阅组件执行以下消息传递操作,以将所述目标发布消息传递给所述每个消息订阅组件,其中,在执行以下消息传递操作的过程中,所述每个消息订阅组件为当前订阅组件:
注册与所述当前订阅组件对应的执行函数体和与所述执行函数体对应的应答函数体,其中,所述执行函数体包含所述当前订阅组件注册的消息处理函数,所述执行函数体的参数包括所述目标发布消息中的发布信息;
依次执行所述执行函数体和所述应答函数体,其中,所述执行函数体用于按照所述消息处理函数对所述目标发布消息中的发布信息进行处理,所述应答函数体用于在所述执行函数体执行完成之后,将与所述当前订阅组件对应的发布指示标识调整为发布完成的指示标识。
4.根据权利要求3所述的方法,其特征在于,所述依次执行所述执行函数体和所述应答函数体,包括:
在所述当前订阅组件的运行时环境有效的情况下,通过调用所述当前订阅组件的运行时环境的接口将所述执行函数体和所述应答函数体传入所述当前订阅组件的运行时环境,以由所述当前订阅组件的运行时环境依次执行所述执行函数体和所述应答函数体;
在所述当前订阅组件的运行时环境无效的情况下,由所述消息传递组件的运行时环境代理执行所述执行函数体和所述应答函数体。
5.根据权利要求3所述的方法,其特征在于,所述依次执行所述执行函数体和所述应答函数体,包括:
将所述目标发布消息中的发布信息以及所述当前订阅组件所指定的参数传入所述执行函数体,以执行所述执行函数体;
在所述执行函数体执行完成之后,触发执行所述应答函数体,以将与所述当前订阅组件对应的发布指示标识调整为发布完成的指示标识。
6.根据权利要求3所述的方法,其特征在于,所述依次执行所述执行函数体和所述应答函数体,包括:
执行所述执行函数体,以按照所述消息处理函数对所述目标发布消息中的发布信息进行处理;
在所述执行函数体执行完成之后,触发执行所述应答函数体,以将发布统计结果中与所述当前订阅组件对应的比特位的值由第一值调整为第二值,其中,所述发布统计结果中的一个比特位对应于所述目标发布消息的一个消息订阅组件,所述第一值用于指示所述目标发布消息未发布给对应的消息订阅组件,所述第二值用于指示所述目标发布消息已发布给了对应的消息订阅组件。
7.根据权利要求6所述的方法,其特征在于,在触发执行所述应答函数体之后,所述方法还包括:
根据所述目标发布消息的目标序列号在发布表中查找与所述目标序列号对应的发布句柄,其中,所述目标序列号用于唯一标识所述目标发布消息的发布流程,所述发布表用于记录发布消息的序列号和发布消息的发布句柄之间的映射关系,所述发布句柄用于指示对应的发布消息的内存地址;
在查找到与所述目标发布消息对应的目标发布句柄的情况下,跳转至所述目标发布句柄所关联的目标内存指针所指向的内存,得到所述发布统计结果,其中,所述目标内存指针为存储所述发布统计结果的内存的指针;
根据所述当前订阅组件所对应的当前索引值,将所述发布统计结果中与所述当前索引值对应的比特位的值由所述第一值调整为所述第二值,其中,所述当前索引值用于表示与所述当前索引值对应的比特位在所述发布统计结果中的位置;
其中,所述应答函数体的参数包括所述目标序列号和所述当前索引值。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
依次遍历与所述目标消息标识对应的目标信息链表的每个链表节点,得到与所述每个消息订阅组件对应的订阅信息、以及与所述每个消息订阅组件对应的索引值,其中,所述每个链表节点中存储有与所述目标消息标识所标识的消息的一个消息订阅组件对应的订阅信息,所述与所述每个消息订阅组件对应的索引值是根据所述每个消息订阅组件遍历到的顺序生成的。
9.根据权利要求6所述的方法,其特征在于,在所述触发执行所述应答函数体之后,所述方法还包括:
在所述发布统计结果中的所有比特位均为所述第二值的情况下,确定所述目标发布消息已发布给了所述目标发布消息的所有消息订阅组件;
在所述发布统计结果中的至少部分比特位为所述第一值的情况下,确定所述目标发布消息未发布给所述目标发布消息的至少部分消息订阅组件。
10.根据权利要求1至9中任一所述的方法,其特征在于,在所述根据所述目标发布消息的目标消息标识,确定所述目标设备中是否存在订阅了所述目标发布消息的消息订阅组件之后,所述方法还包括:
在确定所述目标设备中不存在订阅了所述目标发布消息的消息订阅组件、且所述消息发布组件指示将所述目标发布消息的发布结果反馈给所述消息发布组件的情况下,通过所述消息传递组件向所述消息发布组件反馈第二发布结果,其中,所述第二发布结果用于指示所述目标设备中没有组件订阅所述目标发布消息。
11.一种组件间的消息传递装置,其特征在于,包括:
获取单元,用于通过目标设备的消息传递组件获取所述目标设备的消息发布组件所发布的目标发布消息,其中,所述消息传递组件用于在所述目标设备的不同组件之间传递消息;
第一确定单元,用于根据所述目标发布消息的目标消息标识,确定所述目标设备中是否存在订阅了所述目标发布消息的消息订阅组件;
传递单元,用于在确定所述目标设备中存在订阅了所述目标发布消息的消息订阅组件、且所述消息发布组件指示将所述目标发布消息的发布结果反馈给所述消息发布组件的情况下,通过所述消息传递组件将所述目标发布消息分发传递给订阅了所述目标发布消息的每个消息订阅组件;
第一反馈单元,用于根据在预设时间内所述目标发布消息已发布给的消息订阅组件,向所述消息发布组件反馈第一发布结果,其中,所述第一发布结果用于指示所述目标发布消息是否已发布给了所述目标发布消息的所有消息订阅组件。
12.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行权利要求1至10中任一项所述的方法。
13.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行权利要求1至10中任一项所述的方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211366283.2A CN115766318A (zh) | 2022-10-31 | 2022-10-31 | 组件间的消息传递方法和装置、存储介质及电子装置 |
PCT/CN2022/135687 WO2024092938A1 (zh) | 2022-10-31 | 2022-11-30 | 组件间的消息传递方法和装置、存储介质及电子装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211366283.2A CN115766318A (zh) | 2022-10-31 | 2022-10-31 | 组件间的消息传递方法和装置、存储介质及电子装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115766318A true CN115766318A (zh) | 2023-03-07 |
Family
ID=85356049
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211366283.2A Pending CN115766318A (zh) | 2022-10-31 | 2022-10-31 | 组件间的消息传递方法和装置、存储介质及电子装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN115766318A (zh) |
WO (1) | WO2024092938A1 (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8140630B2 (en) * | 2008-03-05 | 2012-03-20 | International Business Machines Corporation | Publish/subscribe message broker for message sequences |
CN102859541A (zh) * | 2010-04-19 | 2013-01-02 | 国际商业机器公司 | 在发布/订阅通讯中控制消息传递 |
CN104424555B (zh) * | 2013-08-30 | 2018-01-02 | 国际商业机器公司 | 用于发布/订阅系统中的控制方法及设备 |
CN107360082B (zh) * | 2017-07-28 | 2020-08-25 | 苏州浪潮智能科技有限公司 | 一种发布/订阅方法及装置 |
-
2022
- 2022-10-31 CN CN202211366283.2A patent/CN115766318A/zh active Pending
- 2022-11-30 WO PCT/CN2022/135687 patent/WO2024092938A1/zh unknown
Also Published As
Publication number | Publication date |
---|---|
WO2024092938A1 (zh) | 2024-05-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10454795B1 (en) | Intermediate batch service for serverless computing environment metrics | |
CN109002249B (zh) | 通过长按手势实现礼物连击的方法、存储介质、设备及系统 | |
CN113141383B (zh) | 设备信息订阅方法、客户端、服务器、系统及存储介质 | |
CN113890895A (zh) | 消息推送方法和装置、存储介质及电子装置 | |
WO2021159831A1 (zh) | 编程平台的用户代码运行方法及平台、节点、设备、介质 | |
CN110753129A (zh) | 消息传输方法、系统、装置、设备及计算机可读存储介质 | |
CN114461371B (zh) | 一种服务器系统中断优化方法、装置、设备及介质 | |
CN108366098B (zh) | 一种网络节点的数据交互方法及装置 | |
CN111282263A (zh) | 事件消息的处理方法、装置、电子设备及可读存储介质 | |
US10169259B2 (en) | Pattern-based service bus architecture using activity-oriented services | |
WO2024092939A1 (zh) | 组件间的消息传递方法和装置、存储介质及电子装置 | |
CN113242149B (zh) | 长连接配置方法、装置、设备、存储介质和程序产品 | |
CN108933947A (zh) | 弹幕显示方法及装置 | |
CN115766318A (zh) | 组件间的消息传递方法和装置、存储介质及电子装置 | |
CN110309028B (zh) | 监控信息获取方法、服务监控方法、装置及系统 | |
CN109995863B (zh) | 一种动态资源下载方法、装置、电子设备及存储介质 | |
CN109117278B (zh) | 一种移动终端及其进程间通信的限制方法、存储介质 | |
CN115951923A (zh) | 订阅事件管理方法及相关产品 | |
CN107592633B (zh) | 一种订阅处理方法、装置、电子设备及可读存储介质 | |
WO2024092940A1 (zh) | 组件间的消息传递方法和装置、存储介质及电子装置 | |
CN115766315A (zh) | 组件信息的处理方法和装置、存储介质及电子装置 | |
CN112905295B (zh) | 数据互通方法、计算设备及计算机存储介质 | |
CN115329005A (zh) | 多集群的协同方法、系统、装置及计算机可读存储介质 | |
CN109005448B (zh) | 弹幕消息分发方法、装置、设备及存储介质 | |
CN108810644B (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 |