一种消息处理方法、电子设备及计算机可读存储介质与流程
未命名
07-22
阅读:101
评论:0
1.本说明书中实施方式关于计算机应用技术领域,具体地说,涉及计算机应用技术领域下的消息处理技术,更具体地说,涉及一种消息处理方法、电子设备及计算机可读存储介质。
背景技术:
2.随着互联网技术在生活场景和工作场景中的应用越来越广泛,其为人们的生活和工作提供了越来越多的便利。
3.一些场景下,消息传递的方式不再是收发双方简单的发送和接收,而是利用了消息中间件对消息进行中转。利用消息中间件的消息队列中转发送方发送的消息,可以降低系统耦合性以及实现消息的异步处理。尤其,为确保消息的可靠性和一致性,当接收方成功收到消息并返回确认消息时,发送方才能确定消息已经被正确地传递到接收方,进而才会继续发送其它消息。
4.然而,虽然上述消息传递方式保证了消息的可靠性和一致性。但由于一些特殊情况,发送方将始终无法接收到接收方反馈的确认消息。这样,发送方将一直等待确认消息,从而无法发送其它消息,最终造成发送方的阻塞。
技术实现要素:
5.本说明书中多个实施方式提供一种消息处理方法、电子设备及计算机可读存储介质,以实现在保证消息的可靠性和一致性的同时,避免消息的发送端阻塞的目的。
6.第一方面,本说明书的一个实施方式提供了一种消息处理方法,应用于发送端,所述消息处理方法包括:在通过第一套接字对象向接收端发送目标消息之后,将目标线程设置为等待状态;其中,所述目标线程为用于管理所述第一套接字对象的线程;接收所述接收端发送的线程唤醒信号;其中,所述线程唤醒信号为所述接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;所述第一套接字对象和所述第二套接字对象为配对的套接字对象;根据所述线程唤醒信号唤醒所述目标线程,并继续对所述目标消息进行处理。
7.第二方面,本说明书的一个实施方式提供了一种消息处理方法,应用于接收端,所述消息处理方法包括:在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号;向发送端发送线程唤醒信号;所述线程唤醒信号用于指示所述发送端在通过第一套接字对象向所述接收端发送目标消息,并将目标线程设置为等待状态之后,唤醒所述目标线程,并继续对所述目标消息进行处理;所述目标线程为用于管理所述第一套接字对象的线程;所述第一套接字对象和所述第二套接字对象为配对的套接字对象。
8.第三方面,本说明书的一个实施方式提供了一种消息处理装置,应用于发送端,所述消息处理装置包括:线程处理模块,用于在通过第一套接字对象向接收端发送目标消息之后,将目标线程设置为等待状态;其中,所述目标线程为用于管理所述第一套接字对象的线程;信号接收模块,用于接收所述接收端发送的线程唤醒信号;其中,所述线程唤醒信号为所述接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;所述第一套接字对象和所述第二套接字对象为配对的套接字对象;消息处理模块,用于根据所述线程唤醒信号唤醒所述目标线程,并继续对所述目标消息进行处理。
9.第四方面,本说明书的一个实施方式提供了一种消息处理装置,应用于接收端,所述消息处理装置包括:唤醒信号模块,用于在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号;信号发送模块,用于向发送端发送线程唤醒信号;所述线程唤醒信号用于指示所述发送端在通过第一套接字对象向所述接收端发送目标消息,并将目标线程设置为等待状态之后,唤醒所述目标线程,并继续对所述目标消息进行处理;所述目标线程为用于管理所述第一套接字对象的线程;所述第一套接字对象和所述第二套接字对象为配对的套接字对象。第五方面,本说明书的一个实施方式提供了一种电子设备,包括处理器和存储器;其中,所述存储器与所述处理器连接,所述存储器用于存储计算机程序;
10.所述处理器,用于通过运行所述存储器中存储的计算机程序,实现如上所述的消息处理方法。
11.第六方面,本说明书的一个实施方式提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时,实现如上所述的消息处理方法。
12.第七方面,本说明书的一个实施方式提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序存储在计算机可读存储介质中;所述计算机设备的处理器从所述计算机可读存储介质读取所述计算机程序,所述处理器执行所述计算机程序时实现上述的消息处理方法的步骤。
13.本说明书提供的多个实施方式,在通过第一套接字对象向接收端发送目标消息之后,将管理第一套接字对象的目标线程设置为等待状态。从而可以避免在未接收到接收端的反馈之前,通过目标线程发送其它消息,保证了消息的可靠性和一致性。在接收到接收端发送的线程唤醒信号的情况下,由于线程唤醒信号为接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;且第一套接字对象和第二套接字对象为配对的套接字对象。发送端将无法等到接收端的表征确认接收到消息的反馈。因此,可以直接根据线程唤醒信号唤醒目标线程,然后继续对目标消息进行处理。本实施例中,即使消息的接收端未接收到相应的消息,无法返回表征确认接收到消息的反馈。消息的发送端依旧可以继续处理消息,而非一直等待。在保证消息的可靠性和一致性的同时,避免消息的发送端阻塞。
附图说明
14.图1为本说明书的一个实施方式提供的一种消息处理方法的应用环境示意图。
15.图2为本说明书的一个实施方式提供的一种消息处理方法的步骤示意图。
16.图3为本说明书的一个实施方式提供的另一种消息处理方法的步骤示意图。
17.图4为本说明书的一个实施方式提供的一种消息处理方法的实际应用流程图。
18.图5为本说明书的一个实施方式提供的一种消息处理装置的结构示意图。
19.图6为本说明书的一个实施方式提供的另一种消息处理装置的结构示意图。
20.图7为本说明书的一个实施方式提供的一种电子设备的结构示意图。
具体实施方式
21.除非另外定义,本说明书实施例使用的技术术语或者科学术语应当为本说明书所属领域内具有一般技能的人士所理解的通常意义。本说明书实施例使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来避免构成要素的混同而设置的。
22.除非上下文另有要求,否则,在整个说明书中,“多个”表示“至少两个”,“包括”被解释为开放、包含的意思,即为“包含,但不限于”。在说明书的描述中,术语“一个实施例”、“一些实施例”、“示例性实施例”、“示例”、“特定示例”或“一些示例”等旨在表明与该实施例或示例相关的特定特征、结构、材料或特性包括在本说明书的至少一个实施例或示例中。上述术语的示意性表示不一定是指同一实施例或示例。
23.下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本说明书保护的范围。概述
24.如背景技术中所述,利用消息中间件传递消息的方式,在生活和工作场景中的应用十分广泛。例如,车辆的自动驾驶场景中,车辆与道路上设置的交通设施之间、车辆的各传感器与车辆控制器之间、运行于车辆控制器上的各功能模块或功能系统之间,均可以利用消息中间件传递消息。传递消息的双方,其中一方为发送端,另一方为接收端。为保证消息的可靠性和一致性,接收端在接收到消息之后,向发送端返回表征确认接收到消息的确认消息。发送端在接收到确认消息的情况下,认定接收端接收到了自己发送的消息,进而才会继续发送其它消息。
25.虽然上述传递消息的方式保证了消息的可靠性和一致性。但可能因为网络故障、设备故障等一些原因,在传递消息的过程中,接收端接收不到发送端发送的消息。这样,接收端也就无法返回确认消息。使得发送端在发送消息之后一直处于等待状态,无法发送其它消息。
26.针对上述问题,本说明书提供一种消息处理方法、电子设备及计算机可读存储介质,目的在于在发送端发送消息之后的长时间内,若未接收到接收端返回的确认消息,可以基于接收端返回的线程唤醒信号,重新唤醒线程对发送的消息继续进行处理,从而避免发生阻塞。以下通过实施例对具体方案进行详细说明。
示例性场景
27.图1示出了本说明书实施例所提出的技术方案的一种示例性实施环境,该实施环境为部署在车辆上的自动驾驶系统。该自动驾驶系统包括运行于车辆处理器上的能够实现自动驾驶功能的多个服务或应用程序。其中,每一服务或应用程序可以理解为实现自动驾驶功能的一软件系统。例如图1所示,自动驾驶系统至少包括传感器数据处理系统001和车辆控制系统002。
28.其中,传感器数据处理系统001用于收集环境感知数据,该环境感知数据可以表征车辆行驶过程中的环境情况。其中,这里的环境包括车辆内部的环境以及车辆周围的环境。车辆内部的环境包括车辆行驶过程中的各种状态信息,例如车速、加速度、转向情况、车窗状态等。传感器数据处理系统001收集的环境感知数据可以由车辆上的环境感知设备采集而来。环境感知设备可以包括多种相同或不同类型的环境感知设备,其数量可以为一个或多个,例如,具体可以包括但不限于光学摄像头、红外摄像头、激光传感器、超声传感器等。基于这些不同类型或不同功能的感知设备,可以对车辆行驶过程中的行驶环境进行探测和数据记录,进而由传感器数据处理系统001将数据发送至车辆控制系统002。车辆控制系统002用于根据传感器数据处理系统001发送的环境感知数据生成相应的驾驶指令,控制车辆按照驾驶指令安全行驶,实现自动驾驶功能。
29.作为可选的实施方式,自动驾驶系统还可以包括:导航系统、车辆状态检测系统、车辆控制系统等。由于各系统全部运行于车辆处理器上,因此各系统之间传递消息可以视为处理器上的各进程之间的通信。
30.除了上述自动驾驶场景中传感器数据处理系统001与车辆控制系统002传递消息之外,本说明书的消息处理方法还可以应用于自动驾驶场景中其它功能模块之间传递消息的情况,甚至可以应用于其它场景下功能模块之间传递消息的情况。这里的功能模块可以为具有某项功能的硬件模块或者软件系统。本说明书对此并不做限定,只要传递消息的双方采用上述保证消息可靠性和一致性的消息传递方式即可。示例性方法
31.以应用于图1所示的应用场景下的传感器数据处理系统001为例,本说明书实施例提供了一种消息处理方法。为便于描述,本实施例将传感器数据处理系统001作为消息的发送端,如图2所示,该消息处理方法包括:s201:在通过第一套接字对象向接收端发送目标消息之后,将目标线程设置为等待状态。
32.本步骤中,第一套接字对象为通过套接字(socket)创建的对象,即套接字的实例化对象。其中,套接字是一种用于网络通信的编程接口,它提供了一种标准的方法,使得不同计算机或进程之间能够通过网络进行数据的传输和通信,这里不再详述。由发送端发送至接收端的消息,均可以视为目标消息。对于目标消息的数据内容和数据格式,其与消息处理方法的应用场景相关,这里不做限定。例如,自动驾驶场景中,发送端需要发送车速信息至接收端,则该车速信息即为目标消息。
33.一些实施方式中,发送端设置有多个套接字对象,其中,每个套接字对象用于传输一种类型的数据。第一套接字对象为多个套接字对象中的任意一个。在图1所示的自动驾驶系统中,为保障行车安全,传感器数据处理系统001需要将车速、加速度、转向情况、车窗状
态等数据发送至车辆控制系统002,从而车辆控制系统002可以根据接收到的数据生成合理的驾驶指令,以控制车辆按照驾驶指令安全行驶。其中,车速、加速度、转向情况、车窗状态等各项数据,将分别采用不同的套接字对象进行异步传输。
34.目标线程为用于管理第一套接字对象的线程。可以理解的是,线程是操作系统能够进行运算调度的最小单位。在本实施方式中,采用目标线程管理第一套接字对象。也就是说,在目标线程中控制第一套接字对象发送消息、接收消息以及进行其它操作。线程处于等待状态时,可以视为该线程被占用,此时无法继续利用该线程发送消息,直至该线程被唤醒才可以继续发送消息。一些实施方式中,发送端在接收到接收端返回的表征接收到目标消息的反馈的情况下,将唤醒目标线程,并在目标线程中通过第一套接字对象发送其它消息。
35.s202:接收接收端发送的线程唤醒信号。
36.本步骤中,线程唤醒信号为接收端发送的反馈,区别于表征接收到目标消息的反馈,该线程唤醒信号可以表征接收端未接收到目标消息。具体的,线程唤醒信号为接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号。其中,第一套接字对象和第二套接字对象为配对的套接字对象。也就说,在发送端或者接收端存在多个套接字对象的情况下,与第一套接字对象进行数据交互的套接字为与其配对的第二套接字对象,而非其它套接字对象。并且,与第二套接字对象进行数据交互的套接字一定为与其配对的第一套接字对象,而非其它套接字对象。
37.在发送端发送目标消息之后,通常情况下接收端可以通过第二套接字对象在目标时长内接收到目标消息。然后接收端返回表征接收到目标消息的反馈至发送端。发送端才会继续发送其它消息。然而,由于网络故障、设备故障等原因,可能会造成接收端接收不到目标消息。针对这种情况,在本实施方式中,在发送端和接收端预先约定好一用于唤醒线程的线程唤醒信号。接收端未接收到目标消息的情况下,返回该约定好的线程唤醒信号。
38.s203:根据线程唤醒信号唤醒目标线程,并继续对目标消息进行处理。
39.本步骤中,目标线程被唤醒之后,可以通过目标线程继续对第一套接字进行管理,并实现对目标消息的处理。继续对目标消息进行处理,包括但不限于重新向接收端发送目标消息。
40.应当说明的是,本实施方式虽然以图1所示的应用场景下的传感器数据处理系统001为例,但本说明书的实施方式并不限于此。作为传递消息的双方,发送端和接收端可以是两个不同的硬件设备,例如,车辆的自动驾驶场景中,发送端和接收端可以是车辆和道路上设置的交通设施,也可以是车辆的各传感器和车辆控制器。发送端和接收端也可以是运行于同一硬件设备上的不同软件系统,例如,发送端和接收端可以是运行于车辆控制器上的传感器数据处理系统和车辆控制系统。
41.在本实施方式中,在通过第一套接字对象向接收端发送目标消息之后,将管理第一套接字对象的目标线程设置为等待状态。从而可以避免在未接收到接收端的反馈之前,通过目标线程发送其它消息,保证了消息的可靠性和一致性。在接收到接收端发送的线程唤醒信号的情况下,由于线程唤醒信号为接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;且第一套接字对象和第二套接字对象为配对的套接字对象。发送端将无法等到接收端的表征确认接收到消息的反馈。因此,可以直接根据线程唤醒信号唤醒目标线程,然后继续对目标消息进行处理。本实施例中,即使消息的接收端未
接收到相应的消息,无法返回表征确认接收到消息的反馈。消息的发送端依旧可以继续处理消息,而非一直等待。在保证消息的可靠性和一致性的同时,避免消息的发送端阻塞。
42.在一些实施方式中,继续对目标消息进行处理,包括:在目标消息为目标业务的必要参数项的情况下,将目标消息重新添加至待发送消息队列中;其中,目标业务为目标消息所属业务,必要参数项为用于使目标业务正常运行的参数项;从待发送消息队列中取出目标消息,并通过第一套接字对象向接收端重新发送目标消息。
43.在本实施方式中,目标业务可以为提供任意服务的业务,例如,目标业务可以是提供自动泊车服务的自动驾驶业务,提供停车收费服务的车辆管理业务等。本说明书对目标业务所提供的具体服务不做限定。这里,目标业务为接收端所提供的业务,该目标业务若想正常运行,需要使用发送端收集的某些数据,这些数据即为目标业务的必要参数项。因此,必要参数项与目标业务所提供的服务相关,对于提供不同服务的目标业务,其所使用的必要参数项不尽相同。例如,对于提供自动泊车服务的自动驾驶业务,其必要参数项包括车辆的位置、车辆周围障碍物的位置等。对于提供停车收费服务的车辆管理业务,其必要参数项包括车辆的车牌号、停车时间等。本说明书对必要参数项的具体内容不做限定。
44.待发送消息队列为设置于发送端的消息队列,对于需要发送的消息,发送端先将其加入到待发送消息队列中,然后从中取出消息进行发送。这里,待发送消息队列中的消息被取出之后,队列中将不存在该消息。本实施方式中,待发送消息队列为一代码实现的消息队列,其具有传统消息队列所具备的解耦、异步、削峰等作用,这里不再详述。在步骤s201之前,发送端先将需要发送的目标消息添加至待发送消息队列,然后从待发送消息队列中取出目标消息,将取出的目标消息发送至接收端。
45.一些实施方式中,发送端设置有多个套接字对象,其中,每个套接字对象用于传输一种类型的数据。相应的,发送端对应每一套接字对象设置有一待发送消息队列,且各待发送消息队列之间互不干扰。
46.在本实施方式中,对于影响目标业务正常运行的必要参数项,采用重新发送的方式进行处理,以确保目标业务的正常运行。
47.在一些实施方式中,继续对目标消息进行处理,包括:在目标消息并非目标业务的必要参数项的情况下,丢弃目标消息;其中,目标业务为目标消息所属业务,必要参数项为用于使目标业务正常运行的参数项。
48.本实施方式中,对于目标业务、必要参数项,可以参见上述实施方式中对目标业务和必要参数项的描述,这里不再赘述。可以理解的是,目标业务提供服务的过程中,其所需使用的数据包括必要参数项和非必要参数项。非必要参数项不会影响目标业务的正常运行,一些实施方式中,非必要参数为优化目标业务所提供的服务所需的数据。例如,对于提供自动泊车服务的自动驾驶业务,其非必要参数项包括车窗状态、车速等。本实施方式中,目标消息并非目标业务的必要参数项,即为目标消息为目标业务的非必要参数项。丢弃目标消息后,将不再发送该目标消息,发送端可以视为接收端已经接收到该目标消息,从而继续发送其它消息。
49.本实施方式中,对于不会影响目标业务正常运行的非必要参数项,采用丢弃的方
式进行处理。无需重新发送目标消息,可以降低发送端的压力,简化目标消息的处理流程。
50.为便于查看和使用发送端所丢弃的消息,在本说明书的一个实施方式中,在丢弃目标消息之前或之后,该消息处理方法还包括:将丢弃的目标消息存储至目标数据库。
51.其中,目标数据库可以为发送端本地的数据库,也可以为设置于云端的数据库。一些实施方式中,发送端本地设置有一用于存储被丢弃的消息的目标数据库,同时,发送端本地还提供有查看、编辑该目标数据库的数据库功能。发送端在丢弃消息之后,将丢弃的消息存储至目标数据库中。当用户想要查看和使用发送端丢弃的消息时,通过数据库功能可以查看到之前被丢弃的消息,也可以对这些消息进行编辑。
52.另一些实施方式中,某一云端设置有一用于存储被丢弃的消息的目标数据库,该云端可以与发送端通信。同时,该云端还提供有查看、编辑该目标数据库的数据库功能。发送端在丢弃消息之后,将丢弃的消息发送至云端,使得云端将这些消息存储至目标数据库中。当用户想要查看和使用发送端丢弃的消息时,通过数据库功能可以查看到之前被丢弃的消息,也可以对这些消息进行编辑。
53.在本实施方式中,将丢弃的消息使用目标数据库存储起来,从而便于用户后续查看以及使用。
54.在一些实施方式中,所述目标业务为车辆的自动驾驶业务,所述自动驾驶业务包括与行车安全相关联的参数集合;其中,所述必要参数项为所述参数集合中的元素。
55.本实施方式中,与行车安全相关联的参数集合,由影响行车安全的必要参数项组成。可以理解的是,在车辆使用自动驾驶业务进行自动驾驶的过程中,需要实时采集一些行车数据,以保证车辆可以安全行驶。这些可以影响行车安全的行车数据,即为本实施方式中的必要参数项。例如,在行车过程中,通过监测并控制车速,从而可以避免超速。通过监测车辆位置,可以控制车辆行驶在车道内,避免压线。通过监测车辆姿态,可以控制车辆安全变道以及超车。通过监测车辆前方障碍物,可以控制车辆进行紧急刹车、控制车辆跟车距离等。若车速、车辆位置、车辆姿态、车辆前方障碍物等数据缺失,将影响行车安全。因此,车速、车辆位置、车辆姿态、车辆前方障碍物可以作为影响行车安全的必要参数项。当然,本实施方式中组成参数集合的必要参数项并不限于此,其还可以包括其它影响行车安全的参数项,本实施方式不再一一列举。在本实施方式中,可以预先确定影响行车安全的各必要参数项,然后生成包含各必要参数项的参数集合。在判断某一信号是否为必要参数项时,将该信号与参数集合中的每一必要参数项分别进行比较,若该信号与某一必要参数项相同,则该信号为必要参数项,否则该信号并非必要参数项。例如,参数集合包括车速和车辆位置两个必要参数项。在判断某一信号是否为必要参数项时,将该信号分别与车速和车辆位置分别进行比较,判断该信号是否为车速信号或者车辆位置信号。若该信号为车速信号或者车辆位置信号,则该信号为必要参数项,否则该信号并非必要参数项。
56.本实施方式中,将与行车安全相关联的参数集合中的元素作为必要参数项,可以在车辆自动驾驶过程中,保证行车安全。
57.在一些实施例中,第一套接字对象为基于zeromq的发布订阅模式创建的发布者,第二套接字对象为zeromq的发布订阅模式创建的订阅者。
58.其中,zeromq(简称zmq)是一个基于消息队列的多线程网络库,其对套接字类型、
连接处理、帧、甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字。发布订阅模式为zeromq的其中一种消息模式,其中,发布者作为消息的发送端,其为zmq_pub类型的套接字或者zmq_xpub类型的套接字。订阅者作为消息的接收端,其为zmq_sub类型的套接字或者zmq_xsub类型的套接字。一些实施方式中,第一套接字对象和第二套接字对象还可以是基于zeromq的其它消息模式创建的套接字对象。其它消息模块包括:客户端-服务器模式(client-server)、广播盘模式(radio-dish)、请求-回复模式(req-rep)等。
59.本实施方式中,基于zeromq的发布订阅模式创建第一套接字对象和第二套接字对象,可以享受zeromq提供的便利,从而降低了开发难度,提升了开发效率。
60.以应用于接收端为例,本说明书实施方式还提供了一种消息处理方法,如图3所示,包括:s301:在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号;s302:向发送端发送线程唤醒信号;线程唤醒信号用于指示发送端在通过第一套接字对象向接收端发送目标消息,并将目标线程设置为等待状态之后,唤醒目标线程,并继续对目标消息进行处理;目标线程为用于管理第一套接字对象的线程;第一套接字对象和第二套接字对象为配对的套接字对象。
61.关于步骤s301以及步骤s302的可行执行方式以及可能带来的有益效果,可以参考上文中的相关描述,本说明书在此不做赘述。应当说明的是,目标时长为接收端等待消息的超时时间。其可以为一较短的时长,例如目标时长可以为1s,但不限于此。接收端等待消息的过程中,相应的线程被占用,无法进行其它操作。在超时时间内接收到消息的情况下,将返回表征接收到消息的反馈至发送端。若超时时间内未接收到消息,将不再继续等待,而是执行其它操作,从而避免接收端被阻塞。
62.在一些实施方式中,在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号,包括:循环访问多个套接字对象,并在访问每一套接字对象期间,监听针对套接字对象的输入事件;其中,在目标时长内未监听到针对第二套接字对象的输入事件的情况下,生成线程唤醒信号,并访问第三套接字对象;第二套接字对象为多个套接字对象中当前访问的套接字对象;第三套接字对象为多个套接字对象中除第二套接字对象之外的任一套接字对象。
63.在本实施方式中,接收端存在多个套接字对象,需要监听每一套接字对象是否接收到消息以及进行相应处理。具体的,通过循环访问的方式访问每一套接字对象,并对访问的每一套接字对象执行相同的操作。
64.本实施方式中,可以对多个套接字对象进行监听,从而应对更多的场景。
65.在一些实施方式中,循环访问多个套接字对象,并在访问每一套接字对象期间,监听针对套接字对象的输入事件,包括:通过zeromq的轮询器(poller)对象循环访问多个套接字对象,并在访问每一套接字对象期间,通过poll函数监听针对套接字对象的输入事件。
66.在本实施方式中,关于zeromq可以参考上文中的相关描述,本说明书在此不做赘
述。poller在zeromq中具备轮询的功能,因此可以通过poller对象实现循环访问多个套接字对象的目的。同时,zeromq中poll函数可以监听针对套接字对象的输入事件,在发生输入事件的情况下,说明有消息发送过来,可以通过recv方法接收消息。下面以一具体的示例对接收端的消息处理方法进行说明。如图4所示,该消息处理方法包括:s401:创建zmq的上下文(context)对象。zmq中的context是一个全局的、线程安全的环境,用于管理zmq网络上下文和某些全局资源。在zmq中,一个context对象代表了一个线程安全的通信对象,它包含了zmq全局上下文信息,如线程池、i/o事件处理器等等。
67.s402:创建zmq的套接字对象,并设置每一套接字对象的类型、链接地址和订阅选项。套接字对象即为socket对象,关于zmq中的socket对象,这里不再详述。本实施方式中,通过不同的套接字对象接收不同类型的数据。
68.s403:创建zmq的poller对象,并将套接字对象注册到poller对象中。zmq的poller对象会轮询访问注册到其中的套接字对象,从而实现对多个套接字的监听及处理。
69.s404:设置超时时间。该超时时间为访问每一套接字对象过程中最长等待时间。
70.s405:在通过poller对象访问每一套接字对象时,使用poll函数等待套接字对象上的输入事件。这里的,最长等待时间即为超时时间,在超时时间内未监听到针对某一套接字对象的输入事件,则继续访问并监听下一套接字对象。
71.s406:根据poller对象的返回值执行相应操作。具体的,该返回值可以为一字典。若该字典中存在套接字的标志,则说明相应套接字对象上发生了输入事件,进而通过recv方法接收消息,然后进行相应回复,并继续监听下一套接字对象。若该字典为空,则说明当前访问的套接字对象上未发生输入事件,继续访问并监听下一套接字对象。示例性装置
72.本说明书的一些实施方式还提供了一种消息处理装置,应用于发送端,如图5所示,该消息处理装置包括:线程处理模块501,用于在通过第一套接字对象向接收端发送目标消息之后,将目标线程设置为等待状态;其中,目标线程为用于管理第一套接字对象的线程;信号接收模块502,用于接收接收端发送的线程唤醒信号;其中,线程唤醒信号为接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;第一套接字对象和第二套接字对象为配对的套接字对象;消息处理模块503,用于根据线程唤醒信号唤醒目标线程,并继续对目标消息进行处理。
73.在一些实施方式中,消息处理模块503,具体用于:在目标消息为目标业务的必要参数项的情况下,将目标消息重新添加至待发送消息队列中;其中,目标业务为目标消息所属业务,必要参数项为用于使目标业务正常运行的参数项;从待发送消息队列中取出目标消息,并通过第一套接字对象向接收端重新发送目标消息。
74.在一些实施方式中,消息处理模块503,具体用于:在目标消息并非目标业务的必要参数项的情况下,丢弃目标消息;其中,目标业务为目标消息所属业务,必要参数项为用于使目标业务正常运行的参数项。
75.在一些实施方式中,该消息处理装置还包括:数据库模块,用于将丢弃的目标消息存储至目标数据库。
76.在一些实施方式中,目标业务为车辆的自动驾驶业务,自动驾驶业务包括与行车安全相关联的参数集合;其中,必要参数项为参数集合中的元素。
77.在一些实施方式中,第一套接字对象为基于zeromq的发布订阅模式创建的发布者,第二套接字对象为zeromq的发布订阅模式创建的订阅者。
78.相应的,本说明书实施方式还提供了一种消息处理装置,应用于接收端,如图6所示,该消息处理装置包括:唤醒信号模块601,用于在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号;信号发送模块602,用于向发送端发送线程唤醒信号;线程唤醒信号用于指示发送端在通过第一套接字对象向接收端发送目标消息,并将目标线程设置为等待状态之后,唤醒目标线程,并继续对目标消息进行处理;目标线程为用于管理第一套接字对象的线程;第一套接字对象和第二套接字对象为配对的套接字对象。
79.在一些实施方式中,唤醒信号模块601,具体用于:循环访问多个套接字对象,并在访问每一套接字对象期间,监听针对套接字对象的输入事件;其中,在目标时长内未监听到针对第二套接字对象的输入事件的情况下,生成线程唤醒信号,并访问第三套接字对象;第二套接字对象为多个套接字对象中当前访问的套接字对象;第三套接字对象为多个套接字对象中除第二套接字对象之外的任一套接字对象。
80.在一些实施方式中,唤醒信号模块601,具体用于:通过zeromq的轮询器poller对象循环访问多个套接字对象,并在访问每一套接字对象期间,通过poll函数监听针对套接字对象的输入事件。
81.本说明书实施例提供的消息处理装置,与本说明书上述实施例所提供的消息处理方法属于同一发明构思。未在本实施例中详尽描述的技术细节,可参见本说明书上述实施例提供的消息处理方法的具体处理内容,此处不再加以赘述。示例性电子设备
82.本说明书另一实施例还提出一种电子设备,参见图7所示,本说明书的一个示例性实施例还提供了一种电子设备,包括:存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时执行本说明书上述实施例中描述的根据本说明书各种实施例的消息处理方法中的步骤。
83.该电子设备的内部结构可以如图7所示,该电子设备包括通过系统总线连接的处理器、存储器、网络接口和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以本说明书上述实施例中描述的根据本说明书各种实施例的消息处理方法中的步骤。
84.处理器可包括主处理器,还可包括基带芯片、调制解调器等。
85.存储器中保存有执行本发明技术方案的计算机程序,还可以保存有操作系统和其他关键业务。具体地,计算机程序可以包括程序代码,程序代码包括计算机操作指令。更具体的,存储器可以包括只读存储器(read-only memory,rom)、可存储静态信息和指令的其他类型的静态存储设备、随机存取存储器(random access memory,ram)、可存储信息和指令的其他类型的动态存储设备、磁盘存储器、flash等等。
86.处理器可以是通用处理器,例如通用中央处理器(cpu)、微处理器等,也可以是特定应用集成电路(application-specific integratedcircuit,asic),或一个或多个用于控制本发明方案程序执行的集成电路。还可以是数字信号处理器(dsp)、专用集成电路(asic)、现成可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
87.输入设备可包括接收用户输入的数据和信息的装置,例如键盘、鼠标、摄像头、扫描仪、光笔、语音输入装置、触摸屏、计步器或重力感应器等。
88.输出设备可包括允许输出信息给用户的装置,例如显示屏、打印机、扬声器等。
89.通信接口可包括使用任何收发器一类的装置,以便与其他设备或通信网络通信,如以太网,无线接入网(ran),无线局域网(wlan)等。
90.处理器执行存储器中所存放的计算机程序,以及调用其他设备,可用于实现本说明书上述实施方式所提供的任意一种消息处理方法的各个步骤。
91.该电子设备还可以包括显示组件和语音组件,该显示组件可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示组件上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
92.本领域技术人员可以理解,图7中示出的结构,仅仅是与本说明书方案相关的部分结构的框图,并不构成对本说明书方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。示例性计算机程序产品和计算机可读存储介质
93.除了上述方法和设备以外,本说明书实施例提供的消息处理方法还可以是计算机程序产品,其包括计算机程序,所述计算机程序在被处理器运行时使得所述处理器执行本说明书上述“示例性方法”部分中描述的根据本说明书各种实施例的消息处理方法中的步骤。
94.所述计算机程序产品可以以一种或多种程序设计语言的任意组合来编写用于执行本说明书实施例操作的程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如java、c++等,还包括常规的过程式程序设计语言,诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。
95.此外,本说明书实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行本说明书上述“示例性方法”部分中描述的根据本说明书各种实施例的消息处理方法中的步骤。
96.可以理解,本文中的具体的例子只是为了帮助本领域技术人员更好地理解本说明
书实施方式,而非限制本说明书的范围。
97.可以理解,在本说明书中的各种实施方式中,各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本说明书实施方式的实施过程构成任何限定。
98.可以理解,本说明书中描述的各种实施方式,既可以单独实施,也可以组合实施,本说明书实施方式对此并不限定。
99.除非另有说明,本说明书实施方式所使用的所有技术和科学术语与本说明书的技术领域的技术人员通常理解的含义相同。本说明书中所使用的术语只是为了描述具体的实施方式的目的,不是旨在限制本说明书的范围。本说明书所使用的术语“和/或”包括一个或多个相关的所列项的任意的和所有的组合。在本说明书实施方式和所附权利要求书中所使用的单数形式的“一种”、“上述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义。
100.可以理解,本说明书实施方式的处理器可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法实施方式的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(applicationspecific integrated circuit,asic)、现成可编程门阵列(field programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本说明书实施方式中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本说明书实施方式所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
101.可以理解,本说明书实施方式中的存储器可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(eeprom)或闪存。易失性存储器可以是随机存取存储器(ram)。应注意,本文描述的系统和方法的存储器旨在包括但不限于这些和任意其它适合类型的存储器。
102.本领域普通技术人员可以意识到,结合本文中所公开的实施方式描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本说明书的范围。
103.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施方式中的对应过程,在此不再赘述。
104.在本说明书所提供的几个实施方式中,应所述理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施方式仅仅是示意性的,例如,所
述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
105.所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施方式方案的目的。
106.另外,在本说明书各个实施方式中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
107.所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分或者所述技术方案的部分可以以软件产品的形式体现出来,所述计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本说明书各个实施方式所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom)、随机存取存储器(ram)、磁碟或者光盘等各种可以存储程序代码的介质。
108.以上所述,仅为本说明书的具体实施方式,但本说明书的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本说明书揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本说明书的保护范围之内。因此,本说明书的保护范围应所述以权利要求的保护范围为准。
技术特征:
1.一种消息处理方法,其特征在于,应用于发送端,所述消息处理方法包括:在通过第一套接字对象向接收端发送目标消息之后,将目标线程设置为等待状态;其中,所述目标线程为用于管理所述第一套接字对象的线程;接收所述接收端发送的线程唤醒信号;其中,所述线程唤醒信号为所述接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;所述第一套接字对象和所述第二套接字对象为配对的套接字对象;根据所述线程唤醒信号唤醒所述目标线程,并继续对所述目标消息进行处理。2.根据权利要求1所述的方法,其特征在于,所述继续对所述目标消息进行处理,包括:在所述目标消息为目标业务的必要参数项的情况下,将所述目标消息重新添加至待发送消息队列中;其中,所述目标业务为所述目标消息所属业务,所述必要参数项为用于使所述目标业务正常运行的参数项;从所述待发送消息队列中取出所述目标消息,并通过所述第一套接字对象向所述接收端重新发送所述目标消息。3.根据权利要求1所述的方法,其特征在于,所述继续对所述目标消息进行处理,包括:在所述目标消息并非目标业务的必要参数项的情况下,丢弃所述目标消息;其中,所述目标业务为所述目标消息所属业务,所述必要参数项为用于使所述目标业务正常运行的参数项。4.根据权利要求3所述的方法,其特征在于,所述方法还包括:将丢弃的所述目标消息存储至目标数据库。5.根据权利要求2或3所述的方法,其特征在于,所述目标业务为车辆的自动驾驶业务,所述自动驾驶业务包括与行车安全相关联的参数集合;其中,所述必要参数项为所述参数集合中的元素。6.根据权利要求1所述的方法,其特征在于,所述第一套接字对象为基于zeromq的发布订阅模式创建的发布者,所述第二套接字对象为zeromq的发布订阅模式创建的订阅者。7.一种消息处理方法,其特征在于,应用于接收端,所述消息处理方法包括:在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号;向发送端发送线程唤醒信号;所述线程唤醒信号用于指示所述发送端在通过第一套接字对象向所述接收端发送目标消息,并将目标线程设置为等待状态之后,唤醒所述目标线程,并继续对所述目标消息进行处理;所述目标线程为用于管理所述第一套接字对象的线程;所述第一套接字对象和所述第二套接字对象为配对的套接字对象。8.根据权利要求7所述的方法,其特征在于,在当前访问的第二套接字对象于目标时长内未接收到消息的情况下,生成线程唤醒信号,包括:循环访问多个套接字对象,并在访问每一所述套接字对象期间,监听针对所述套接字对象的输入事件;其中,在目标时长内未监听到针对第二套接字对象的输入事件的情况下,生成线程唤醒信号,并访问第三套接字对象;所述第二套接字对象为所述多个套接字对象中当前访问的套接字对象;所述第三套接字对象为所述多个套接字对象中除所述第二套接字对象之外的任一套接字对象。
9.根据权利要求8所述的方法,其特征在于,所述循环访问多个套接字对象,并在访问每一所述套接字对象期间,监听针对所述套接字对象的输入事件,包括:通过zeromq的轮询器poller对象循环访问多个套接字对象,并在访问每一所述套接字对象期间,通过poll函数监听针对所述套接字对象的输入事件。10.一种电子设备,其特征在于,包括:处理器和存储器;其中,所述存储器与所述处理器连接,所述存储器用于存储计算机程序;所述处理器,用于通过运行所述存储器中存储的计算机程序,实现如权利要求1至6中或者如权利要求7至9任意一项所述的消息处理方法。11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器运行时,实现如权利要求1至6中或者如权利要求7至9任意一项所述的消息处理方法。
技术总结
本说明书实施方式提供了一种消息处理方法、电子设备及计算机可读存储介质,在通过第一套接字对象向接收端发送目标消息之后,将目标线程设置为等待状态;所述目标线程为用于管理所述第一套接字对象的线程;接收所述接收端发送的线程唤醒信号;其中,所述线程唤醒信号为所述接收端在当前访问的第二套接字对象于目标时长内未接收到消息的情况下生成的信号;所述第一套接字对象和所述第二套接字对象为配对的套接字对象;根据所述线程唤醒信号唤醒所述目标线程,并继续对所述目标消息进行处理。即使消息的接收端未接收到相应的消息,消息的发送端依旧可以继续处理消息,而非一直等待。在保证消息的可靠性和一致性的同时,避免消息的发送端阻塞。消息的发送端阻塞。消息的发送端阻塞。
技术研发人员:陈子琦
受保护的技术使用者:北京集度科技有限公司
技术研发日:2023.06.09
技术公布日:2023/7/21
版权声明
本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
飞行汽车 https://www.autovtol.com/
