一种基于MQTT协议的消息收发方法及装置与流程

未命名 10-09 阅读:123 评论:0

一种基于mqtt协议的消息收发方法及装置
技术领域
1.本技术实施例涉及信息传输技术领域,尤其涉及一种基于mqtt协议的消息收发方法及装置。


背景技术:

2.mqtt(message queuing telemetry transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级通讯协议,在物联网、小型设备、移动应用等方面有较广泛的应用。
3.然而,目前的数据发布和订阅机制存在一些问题,如数据冗余、数据不一致、数据冲突等。例如,当多个订阅者同时订阅同一个主题时,可能会造成网络资源的浪费和拥塞,或者导致数据在不同订阅者之间出现不同步或不一致的情况。另外,当多个发布者同时发布同一个主题时,可能会造成数据在不同发布者之间出现冲突或不兼容的情况。


技术实现要素:

4.本技术提供一种基于mqtt协议的消息收发方法及装置,可实现一对一的消息收发且能够实现对主题进行互斥订阅,提高数据传输的效率和质量。
5.第一方面,提供一种基于mqtt协议的消息收发方法,包括:消息发送者向mqtt服务器发送目标消息,所述目标消息包括消息主题和消息内容,所述消息主题携带有消息类型以及目标接收者的客户端标识;所述mqtt服务器根据所述消息类型和所述目标接收者的客户端标识,将所述目标消息发送至所述目标接收者;所述目标接收者作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、所述消息类型以及消息发送者的客户端标识;所述mqtt服务器判断所述订阅类型是否为排他订阅,所述排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;在所述订阅类型为排他订阅时,所述mqtt服务器在所述主题上建立互斥锁,以拒绝所述目标接收者之外的客户端的订阅请求;所述消息发送者作为发布者根据所述主题建立互斥锁,并将所述主题作为自身的发布主题,以使所述主题仅被所述目标接收者订阅。
6.优选地,所述消息发送者向mqtt服务器发送目标消息之前,还包括:
7.所述消息发送者根据消息类型以及目标接收者的客户端标识构造二级主题和三级主题;所述二级主题为消息类型,所述三级主题为目标接收者的客户端标识;将所述二级主题和三级主题作为所述消息主题以及将所述消息内容作为负载,创建所述目标消息。
8.优选地,所述mqtt服务器根据所述消息类型和所述目标接收者的客户端标识,将所述目标消息发送至所述目标接收者,包括:所述mqtt服务器对所述目标消息进行解析以得到所述二级主题和三级主题;判断所述二级主题是否为预设消息类型;若所述二级主题为预设消息类型,则从所述三级主题中提取出所述目标接收者的客户端标识,并将所述目标消息发送至所述目标接收者;或者若所述二级主题不是所述预设消息类型,则忽略所述目标消息。
9.优选地,所述从所述三级主题中提取出所述目标接收者的客户端标识,并将所述目标消息发送至所述目标接收者,包括:所述mqtt服务器根据所述目标接收者的客户端标识,在客户端连接表中查找所述目标接收者是否在线;若所述目标接收者在线,则将所述目标消息发送至所述目标接收者并返回转发成功的结果;或者若所述目标接收者不在线,则将所述目标消息存储在离线消息表中,并返回存储成功的结果;所述离线消息表存储有每个离线客户端的客户端标识和对应的未读消息列表。
10.优选地,所述方法还包括:所述消息发送者和目标接收者基于所述主题进行一对一的消息收发,并根据预设的服务质量级别进行确认或重传;所述消息发送者或目标接收者结束通信后,在所述主题上释放互斥锁,并向所述mqtt服务器发送断开连接请求;所述mqtt服务器收到所述断开连接请求后,在所述主题上释放互斥锁。
11.优选地,所述目标接收者作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、所述消息类型以及消息发送者的客户端标识之后,还包括:所述mqtt服务器检查所述目标接收者请求订阅的主题是否已经被其他客户端订阅;若所述主题已经被其他客户端订阅,则拒绝所述目标接收者的订阅请求;或者若所述主题未被其他客户端订阅,则允许所述目标接收者的订阅请求,并将所述目标接收者的客户端与所述主题关联,以使每个主题只有一个订阅者;所述mqtt服务器检查所述目标接收者请求订阅的主题是否已经取消订阅;若所述主题已经被所述目标接收者取消订阅,则解除所述目标接收者与所述主题的关联,并允许其他客户端订阅所述主题。
12.优选地,所述方法还包括:所述mqtt服务器在收到所述目标接收者取消订阅的消息后,解除所述目标接收者的客户端与主题的关联,以允许其他客户端订阅所述主题。
13.第二方面,提供一种基于mqtt协议的消息收发装置,包括:
14.消息发送模块,用于向mqtt服务器发送目标消息,所述目标消息包括消息主题和消息内容,所述消息主题携带有消息类型以及目标接收模块的客户端标识;mqtt服务器,用于根据所述消息类型和所述目标接收模块的客户端标识,将所述目标消息发送至所述目标接收模块;目标接收模块,用于作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、消息类型以及消息发送模块的客户端标识;所述mqtt服务器还用于判断所述订阅类型是否为排他订阅,所述排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;在所述订阅类型为排他订阅时,所述mqtt服务器用于在所述主题上建立互斥锁,以拒绝所述目标接收模块之外的客户端的订阅请求;所述消息发送模块用于作为发布者根据所述主题建立互斥锁,并将所述订阅主题作为自身的发布主题,以使所述主题仅被所述目标接收模块订阅。
15.优选地,所述mqtt服务器,包括:配置模块,用于在配置文件中对是否开启排它订阅进行配置;检查模块,在开启排它订阅时,用于检查所述目标接收模块请求订阅的主题是否已经被其他客户端订阅;或者检查所述目标接收模块请求订阅的主题是否已经取消订阅;订阅模块,用于允许所述目标接收模块的订阅请求,并将所述目标接收模块的客户端与所述主题关联;所述订阅模块还用于拒绝所述目标接收模块之外的客户端的订阅请求;取消订阅模块,用于在收到所述目标接收模块取消订阅的消息后,解除所述目标接收模块的客户端与主题的关联,以允许其他客户端订阅所述主题。
16.优选地,所述mqtt服务器,还包括:互斥锁管理模块,用于根据订阅消息或取消订
阅消息在所述主题上建立或释放互斥锁,使得每个主题同一时刻仅被允许存在一个消息发送者和一个目标接收者。
17.本技术提供的技术方案,消息发送者先向mqtt服务器发送目标消息;mqtt服务器根据消息类型和目标接收者的客户端标识,将目标消息发送至目标接收者,进而可以实现一对一的消息收发模式,无需事先约定主题或订阅关系,降低了网络开销和推送延迟,提高了消息传输的效率和可靠性;然后目标接收者作为订阅者创建请求订阅的主题;mqtt服务器判断订阅类型是否为排他订阅,排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;在订阅类型为排他订阅时,mqtt服务器在主题上建立互斥锁,以拒绝目标接收者之外的客户端的订阅请求;消息发送者作为发布者根据主题建立互斥锁,并将主题作为自身的发布主题,以使主题仅被目标接收者订阅。通过检查某个客户端请求订阅的主题是否已经被其他客户端订阅,实现了对主题进行互斥订阅的功能,避免了多个订阅者同时订阅同一个主题造成的数据冗余、数据不一致、数据冲突等问题。
附图说明
18.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
19.图1为本技术实施例提供的一种应用场景图;
20.图2为本技术实施例提供的一种基于mqtt协议的消息收发方法的流程图;
21.图3为本技术实施例提供的另一种基于mqtt协议的消息收发方法的流程图;
22.图4为本技术实施例提供的一种基于mqtt协议的消息收发装置的示意图;
23.图5是图4中mqtt服务器的示意性框图。
具体实施方式
24.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
25.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
26.如上所述,在车联网领域中存在大量的数据发布和订阅场景,如车辆获取路况信息、导航信息、娱乐信息等,或者车辆发布自身状态信息、安全警告信息、救援信息等。这些场景需要有效地管理数据发布者和订阅者之间的匹配关系,以实现数据的精准投递和消
费。
27.然而,数据发布和订阅机制存在一些问题,如数据冗余、数据不一致、数据冲突等。例如,当多个订阅者同时订阅同一个主题时,可能会造成网络资源的浪费和拥塞,或者导致数据在不同订阅者之间出现不同步或不一致的情况。另外,当多个发布者同时发布同一个主题时,可能会造成数据在不同发布者之间出现冲突或不兼容的情况。
28.为了解决上述技术问题,本技术的发明构思是:利用云端点对点模式实现一对一的消息收发,无需事先约定主题或订阅关系,降低了网络开销和推送延迟,提高了消息传输的效率和可靠性,然后基于新的数据发布和订阅机制,对主题进行互斥订阅(即一个主题同一时刻仅被允许存在一个订阅者)和p2p(peer to peer,个人对个人)通信,以提高数据传输的效率和质量。
29.应理解的是,本技术技术方案可以应用于如下场景,但不限于:
30.在一些可实现方式中,图1为本技术实施例提供的一种应用场景图,如图1所示,该消息收发系统中可以包括第一mqtt客户端110、mqtt服务器120以及第二mqtt客户端130。第一mqtt客户端110、第二mqtt客户端130可以通过有线网络或者无线网络与mqtt服务器120建立连接。
31.示例性的,第一mqtt客户端110、第二mqtt客户端130可以是台式电脑、笔记本电脑、平板电脑等,但不限于此。mqtt服务器120可以是终端设备或者服务器,但不限于此。在本技术的一种实施例中,第一mqtt客户端110可以作为消息发送者向mqtt服务器120发送目标消息,进一步地,mqtt服务器120可以接收第一mqtt客户端110发送的目标消息并将目标消息转发至第二mqtt客户端130,第二mqtt客户端130可以作为目标接收者接收mqtt服务器120转发的目标消息。
32.此外,图1示例性地给出了一个第一mqtt客户端110以及一个第二mqtt客户端130,实际上可以包括其他数量的客户端,本技术对此不作限制。
33.在介绍了本技术实施例的应用场景之后,下面将对本技术技术方案进行详细阐述:
34.图2为本技术实施例提供的一种基于mqtt协议的消息收发方法的流程图,该方法可以包括如下步骤:
35.s210:消息发送者向mqtt服务器发送目标消息,目标消息包括消息主题和消息内容,消息主题携带有消息类型以及目标接收者的客户端标识。
36.本步骤中,消息发送者可通过第一mqtt客户端向mqtt服务器发送目标消息,目标消息为mqtt消息,mqtt消息包括主题(topic)和负载(payload)两部分,消息发送者可先根据消息类型以及目标接收者的客户端标识构造二级主题和三级主题,其中,二级主题为消息类型,示例性地,二级主题可以为“p2p”;三级主题为目标接收者的客户端标识,示例性地,三级级主题可以为第二mqtt客户端的客户端标识“client id2”,然后将二级主题和三级主题作为消息主题以及将消息内容作为负载,创建目标消息。
37.s220:mqtt服务器根据消息类型和目标接收者的客户端标识,将目标消息发送至目标接收者。
38.本实施例中,目标消息可通过第二mqtt客户端发送至目标接收者,mqtt服务器可先对目标消息进行解析以得到二级主题和三级主题,然后判断二级主题是否为预设消息类
型,若二级主题为预设消息类型,则从三级主题中提取出目标接收者的客户端标识,并将目标消息发送至目标接收者,若二级主题不是预设消息类型,则忽略目标消息。
39.示例性地,预设消息类型可以为人为预先设定的“p2p”类型,mqtt服务器判断二级主题是否为“p2p”,如果是,则将目标消息发送至目标接收者;如果不是,则忽略该消息或按照发布/订阅模式处理该消息。目标接收者通过第二mqtt客户端连接到mqtt服务器后,无需订阅任何主题,即可直接从mqtt服务器接收到来自消息发送者的p2p消息。
40.s230:目标接收者作为订阅者创建请求订阅的主题,主题携带有订阅类型、消息类型以及消息发送者的客户端标识。
41.本步骤中,目标接收者收到目标消息后,可回复一个确认消息给mqtt服务器,并作为订阅者创建请求订阅的主题,主题携带有订阅类型、消息类型以及消息发送者的客户端标识,示例性地,请求订阅的主题可以为:$exclusive/p2p/client id1,其中,“exclusive”表示订阅类型为排他订阅,“p2p”表示消息类型为p2p消息,“client id1”表示消息发送者的客户端标识为client id1。
42.s240:mqtt服务器判断订阅类型是否为排他订阅,排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者。
43.可以理解的是,订阅类型可以包括多种,例如:普通订阅或者排他订阅,普通订阅用于表征一个主题同一时刻被允许存在多个订阅者,排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者。
44.s250:在订阅类型为排他订阅时,mqtt服务器在主题上建立互斥锁,以拒绝目标接收者之外的客户端的订阅请求。
45.s260:消息发送者作为发布者根据主题建立互斥锁,并将主题作为自身的发布主题,以使主题仅被目标接收者订阅。
46.本实施例中,mqtt服务器收到目标接收者的确认消息后,可在主题$exclusive/p2p/client id1上建立一个互斥锁,并将确认消息转发给消息发送者,确认消息用于表示目标接收者已接收到目标消息。消息发送者收到确认消息后,可在$exclusive/p2p/client id1上同样建立一个互斥锁,并使用该主题作为自己的发布主题,从而使消息发送者和目标接收者在$exclusive/p2p/client id1上进行一对一的消息收发,并根据预设或协商的服务质量(qos)级别进行确认或重传。实现了对p2p通信过程中的可靠性保证,使得每个消息能够按照不同的qos级别被传递到目的地。
47.进一步地,消息发送者或目标接收者结束通信后,可在主题上释放互斥锁,并向mqtt服务器发送断开连接请求;mqtt服务器收到断开连接请求后,可在主题上释放互斥锁。
48.进一步地,从三级主题中提取出目标接收者的客户端标识,并将目标消息发送至目标接收者,还进一步包括:
49.s310:mqtt服务器根据目标接收者的客户端标识,在客户端连接表中查找目标接收者是否在线。
50.s320:若目标接收者在线,则将目标消息发送至目标接收者并返回转发成功的结果;或者若目标接收者不在线,则将目标消息存储在离线消息表中,并返回存储成功的结果;离线消息表存储有每个离线客户端的客户端标识和对应的未读消息列表。
51.当目标接收者上线后,mqtt服务器从离线消息表中查找目标接收者的客户端标识
和未读消息列表,并将未读消息列表中的所有消息依次转发给该目标接收者,直到未读消息列表为空。
52.本实施例中,基于mqtt协议的p2p模式的消息收发方法,可以实现一对一的消息收发模式,无需事先约定主题或订阅关系,进而降低了网络开销和推送延迟,提高了消息传输的效率和可靠性。同时,解决了现有技术中,基于发布/订阅模式的消息收发存在的注册订阅关系成本高、消息转发分发开销大、消息推送延迟丢失等问题,改进了消息收发的性能和质量。
53.图3为本技术实施例提供的另一种基于mqtt协议的消息收发方法的流程图。如图3所示,在步骤s230之后,还包括:
54.s270:mqtt服务器检查目标接收者请求订阅的主题是否已经被其他客户端订阅。
55.s280:若主题已经被其他客户端订阅,则拒绝目标接收者的订阅请求;或者若订阅主题未被其他客户端订阅,则允许目标接收者的订阅请求,并将目标接收者的客户端与主题关联,以使每个主题只有一个有效的订阅者。
56.s290:mqtt服务器在收到目标接收者取消订阅的消息后,取消目标接收者的客户端与主题的关联,以允许其他客户端订阅该主题。
57.本实施例中,可通过mqtt服务器或配置模块提前在配置文件中配置是否开启排它订阅,从而可以根据不同的车联网场景和需求选择是否使用排它订阅功能,以增加系统的适应性和可扩展性。若开启排它订阅,则通过mqtt服务器或检查模块检查某个客户端请求订阅的主题是否已经被其他客户端订阅,从而实现了对主题进行互斥订阅的功能,避免了多个订阅者同时订阅同一个主题造成的数据冗余、数据不一致、数据冲突等问题。示例性地,可设置一个排它订阅的前缀,用于标识需要进行排它订阅的主题。mqtt服务器或动态主题生成模块可根据目标接收者的客户端标识生成一个动态主题;例如,可使用$exclusive/t/1表示需要进行排它订阅的主题t/1,从而可方便系统对主题进行分类和过滤,降低系统的复杂度和开销。
58.进一步地,还可通过mqtt服务器或订阅模块允许或拒绝某个客户端的订阅请求,当允许某个客户端的订阅请求时,将该客户端与该主题关联;可通过mqtt服务器或取消订阅模块解除某个客户端与某个主题的关联,并允许其他客户端订阅该主题。实现了对主题进行动态更新的功能,保证了每个主题始终有一个最新的订阅者。
59.进一步地,mqtt服务器或控制消息处理模块可根据动态主题生成或解析控制消息,并与mqtt服务器交互;然后mqtt服务器或互斥锁管理模块可根据控制消息在动态主题上建立或释放互斥锁。实现了对p2p通信过程中的互斥性保证,使得每个动态主题同一时刻仅被允许存在一个发送者和一个接收者。
60.应说明的是,本实施例中的配置模块、检查模块、动态主题生成模块、订阅模块、取消订阅模块、控制消息处理模块、互斥锁管理模块等可集成在另一服务器中,该服务器中可与第一mqtt客户端和第二mqtt客户端交互;在另一种实施例中,以上模块也可设置在mqtt服务器中,本实施例不对其进行具体限定。
61.图4为本技术实施例提供的一种基于mqtt协议的消息收发装置400的示意图。如图4所示,该装置400包括:
62.消息发送模块410,用于向mqtt服务器420发送目标消息,所述目标消息包括消息
主题和消息内容,所述消息主题携带有消息类型以及目标接收模块430的客户端标识;
63.mqtt服务器420,用于根据所述消息类型和所述目标接收模块430的客户端标识,将所述目标消息发送至所述目标接收模块430;
64.目标接收模块430,用于作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、所述消息类型以及消息发送模块410的客户端标识;
65.所述mqtt服务器420还用于判断所述订阅类型是否为排他订阅,所述排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;
66.在所述订阅类型为排他订阅时,所述mqtt服务器420用于在所述主题上建立互斥锁,以拒绝所述目标接收模块430之外的客户端的订阅请求;
67.所述消息发送模块410用于作为发布者根据所述主题建立互斥锁,并将所述主题作为自身的发布主题,以使所述主题仅被所述目标接收模块430订阅。
68.在一些可实现方式中,mqtt服务器420,还包括:
69.配置模块4201,用于在配置文件中对是否开启排它订阅进行配置;
70.检查模块4202,在开启排它订阅时,用于检查目标接收模块430请求订阅的主题是否已经被其他客户端订阅;或者检查所述目标接收模块430请求订阅的主题是否已经取消订阅;
71.订阅模块4203,用于允许所述目标接收模块430的订阅请求,并将所述目标接收模块430的客户端与所述主题关联;所述订阅模块4203还用于拒绝目标接收模块430之外的客户端的订阅请求;
72.取消订阅模块4204,用于在收到目标接收模块430取消订阅的消息后,解除目标接收模块430的客户端与主题的关联,以允许其他客户端订阅所述主题。
73.在一些可实现方式中,mqtt服务器420,还包括:
74.互斥锁管理模块4205,用于根据订阅消息或取消订阅消息在主题上建立或释放互斥锁,使得每个主题同一时刻仅被允许存在一个消息发送者和一个目标接收者。
75.应理解的是,装置实施例与基于mqtt协议的消息收发方法实施例可以相互对应,类似的描述可以参照基于mqtt协议的消息收发方法实施例。为避免重复,此处不再赘述。具体地,图4所示的装置400可以执行上述基于mqtt协议的消息收发方法实施例,并且装置400中的各个模块的前述和其它操作和/或功能分别为了实现上述基于mqtt协议的消息收发方法中的相应流程,为了简洁,在此不再赘述。
76.上文中结合附图从功能模块的角度描述了本技术实施例的装置400。应理解,该功能模块可以通过硬件形式实现,也可以通过软件形式的指令实现,还可以通过硬件和软件模块组合实现。
77.以上仅为本技术的具体实施方式,但本技术的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本技术揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术的保护范围之内。因此,本技术的保护范围应以该权利要求的保护范围为准。

技术特征:
1.一种基于mqtt协议的消息收发方法,其特征在于,包括:消息发送者向mqtt服务器发送目标消息,所述目标消息包括消息主题和消息内容,所述消息主题携带有消息类型以及目标接收者的客户端标识;所述mqtt服务器根据所述消息类型和所述目标接收者的客户端标识,将所述目标消息发送至所述目标接收者;所述目标接收者作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、所述消息类型以及消息发送者的客户端标识;所述mqtt服务器判断所述订阅类型是否为排他订阅,所述排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;在所述订阅类型为排他订阅时,所述mqtt服务器在所述主题上建立互斥锁,以拒绝所述目标接收者之外的客户端的订阅请求;所述消息发送者作为发布者根据所述主题建立互斥锁,并将所述主题作为自身的发布主题,以使所述主题仅被所述目标接收者订阅。2.根据权利要求1所述的方法,其特征在于,所述消息发送者向mqtt服务器发送目标消息之前,还包括:所述消息发送者根据消息类型以及目标接收者的客户端标识构造二级主题和三级主题;所述二级主题为消息类型,所述三级主题为目标接收者的客户端标识;将所述二级主题和三级主题作为所述消息主题以及将所述消息内容作为负载,创建所述目标消息。3.根据权利要求2所述的方法,其特征在于,所述mqtt服务器根据所述消息类型和所述目标接收者的客户端标识,将所述目标消息发送至所述目标接收者,包括:所述mqtt服务器对所述目标消息进行解析以得到所述二级主题和三级主题;判断所述二级主题是否为预设消息类型;若所述二级主题为预设消息类型,则从所述三级主题中提取出所述目标接收者的客户端标识,并将所述目标消息发送至所述目标接收者;或者若所述二级主题不是所述预设消息类型,则忽略所述目标消息。4.根据权利要求3所述的方法,其特征在于,所述从所述三级主题中提取出所述目标接收者的客户端标识,并将所述目标消息发送至所述目标接收者,包括:所述mqtt服务器根据所述目标接收者的客户端标识,在客户端连接表中查找所述目标接收者是否在线;若所述目标接收者在线,则将所述目标消息发送至所述目标接收者并返回转发成功的结果;或者若所述目标接收者不在线,则将所述目标消息存储在离线消息表中,并返回存储成功的结果;所述离线消息表存储有每个离线客户端的客户端标识和对应的未读消息列表。5.根据权利要求1所述的方法,其特征在于,所述方法还包括:所述消息发送者和目标接收者基于所述主题进行一对一的消息收发,并根据预设的服务质量级别进行确认或重传;所述消息发送者或目标接收者结束通信后,在所述主题上释放互斥锁,并向所述mqtt服务器发送断开连接请求;
所述mqtt服务器收到所述断开连接请求后,在所述主题上释放互斥锁。6.根据权利要求1所述的方法,其特征在于,所述目标接收者作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、所述消息类型以及消息发送者的客户端标识之后,还包括:所述mqtt服务器检查所述目标接收者请求订阅的主题是否已经被其他客户端订阅;若所述主题已经被其他客户端订阅,则拒绝所述目标接收者的订阅请求;或者若所述主题未被其他客户端订阅,则允许所述目标接收者的订阅请求,并将所述目标接收者的客户端与所述主题关联,以使每个主题只有一个订阅者;所述mqtt服务器检查所述目标接收者请求订阅的主题是否已经取消订阅;若所述主题已经被所述目标接收者取消订阅,则解除所述目标接收者与所述主题的关联,并允许其他客户端订阅所述主题。7.根据权利要求6所述的方法,其特征在于,所述方法还包括:所述mqtt服务器在收到所述目标接收者取消订阅的消息后,解除所述目标接收者的客户端与主题的关联,以允许其他客户端订阅所述主题。8.一种基于mqtt协议的消息收发装置,其特征在于,包括:消息发送模块,用于向mqtt服务器发送目标消息,所述目标消息包括消息主题和消息内容,所述消息主题携带有消息类型以及目标接收模块的客户端标识;mqtt服务器,用于根据所述消息类型和所述目标接收模块的客户端标识,将所述目标消息发送至所述目标接收模块;目标接收模块,用于作为订阅者创建请求订阅的主题,所述主题携带有订阅类型、所述消息类型以及消息发送模块的客户端标识;所述mqtt服务器还用于判断所述订阅类型是否为排他订阅,所述排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;在所述订阅类型为排他订阅时,所述mqtt服务器用于在所述主题上建立互斥锁,以拒绝所述目标接收模块之外的客户端的订阅请求;所述消息发送模块用于作为发布者根据所述主题建立互斥锁,并将所述主题作为自身的发布主题,以使所述主题仅被所述目标接收模块订阅。9.根据权利要求8所述的装置,其特征在于,所述mqtt服务器,包括:配置模块,用于在配置文件中对是否开启排它订阅进行配置;检查模块,在开启排它订阅时,用于检查所述目标接收模块请求订阅的主题是否已经被其他客户端订阅;或者检查所述目标接收模块请求订阅的主题是否已经取消订阅;订阅模块,用于允许所述目标接收模块的订阅请求,并将所述目标接收模块的客户端与所述主题关联;所述订阅模块还用于拒绝所述目标接收模块之外的客户端的订阅请求;取消订阅模块,用于在收到所述目标接收模块取消订阅的消息后,解除所述目标接收模块的客户端与主题的关联,以允许其他客户端订阅所述主题。10.根据权利要求9所述的装置,其特征在于,所述mqtt服务器,还包括:互斥锁管理模块,用于根据订阅消息或取消订阅消息在所述主题上建立或释放互斥锁,使得每个主题同一时刻仅被允许存在一个消息发送者和一个目标接收者。

技术总结
本申请提供了一种基于MQTT协议的消息收发方法及装置,该方法包括:消息发送者向MQTT服务器发送目标消息;MQTT服务器根据消息类型和目标接收者的客户端标识,将目标消息发送至目标接收者;目标接收者作为订阅者创建请求订阅的主题;MQTT服务器判断订阅类型是否为排他订阅,排他订阅用于表征一个主题同一时刻仅被允许存在一个订阅者;在订阅类型为排他订阅时,MQTT服务器在主题上建立互斥锁,以拒绝目标接收者之外的客户端的订阅请求;消息发送者作为发布者根据主题建立互斥锁,并将主题作为自身的发布主题,以使主题仅被目标接收者订阅。以提高数据传输的效率和质量。以提高数据传输的效率和质量。以提高数据传输的效率和质量。


技术研发人员:刘瑞强
受保护的技术使用者:东软睿驰汽车技术(大连)有限公司
技术研发日:2023.07.07
技术公布日:2023/10/6
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐