CN112039942A - 一种订阅发布方法及服务器 - Google Patents

一种订阅发布方法及服务器 Download PDF

Info

Publication number
CN112039942A
CN112039942A CN202010708136.3A CN202010708136A CN112039942A CN 112039942 A CN112039942 A CN 112039942A CN 202010708136 A CN202010708136 A CN 202010708136A CN 112039942 A CN112039942 A CN 112039942A
Authority
CN
China
Prior art keywords
client
subscription
topic
server
identifier
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
CN202010708136.3A
Other languages
English (en)
Other versions
CN112039942B (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010708136.3A priority Critical patent/CN112039942B/zh
Publication of CN112039942A publication Critical patent/CN112039942A/zh
Application granted granted Critical
Publication of CN112039942B publication Critical patent/CN112039942B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/55Push-based network services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services
    • H04L67/566Grouping or aggregating service requests, e.g. for unified processing
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1859Arrangements for providing special services to substations for broadcast or conference, e.g. multicast adapted to provide push services, e.g. data channels
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/2854Wide area networks, e.g. public data networks
    • H04L12/2856Access arrangements, e.g. Internet access
    • H04L12/2858Access network architectures
    • H04L12/2859Point-to-point connection between the data network and the subscribers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/28Data switching networks characterised by path configuration, e.g. LAN [Local Area Networks] or WAN [Wide Area Networks]
    • H04L12/2854Wide area networks, e.g. public data networks
    • H04L12/2856Access arrangements, e.g. Internet access
    • H04L12/2869Operational details of access network equipments
    • H04L12/287Remote access server, e.g. BRAS
    • H04L12/2876Handling of subscriber policies
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L51/00User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
    • H04L51/21Monitoring or handling of messages
    • H04L51/214Monitoring or handling of messages using selective forwarding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/12Protocols specially adapted for proprietary or special-purpose networking environments, e.g. medical networks, sensor networks, networks in vehicles or remote metering networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/56Provisioning of proxy services

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • General Health & Medical Sciences (AREA)
  • Medical Informatics (AREA)
  • Information Transfer Between Computers (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请实施例公开了一种订阅发布方法及服务器,涉及通信领域,解决了在订阅客户端订阅能处理的发布消息的情况下,订阅客户端上的订阅关系维护较困难的问题。具体方案为:服务器接收发布客户端发送的发布消息,并根据接收到的发布消息获取该发布客户端的标识,且服务器可以根据该发布消息中的主题名获得订阅客户端的标识,并根据该订阅客户端的标识获取与该订阅客户端的标识对应的第一标签,以及根据发布客户端的标识获取与发布客户端的标识对应的第二标签,这样服务器可以将获取到的第一标签与第二标签进行匹配,并在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。

Description

一种订阅发布方法及服务器
相关申请的交叉引用
本申请为于2017年8月29日提交,申请号为CN201710757780.8,发明名称为“一种订阅发布方法及服务器”的中国专利申请的分案,其全部内容通过引用结合在本申请中。
技术领域
本申请实施例涉及通信领域,尤其涉及一种订阅发布方法及服务器。
背景技术
消息队列遥测传输(Message Queue Telemetry Transport,MQTT)协议是一种发布订阅机制的消息传输协议,该发布订阅机制为:手机、笔记本等具有管理功能的订阅终端上的订阅客户端可以向服务器发送包含有主题的订阅消息,温度传感器等发布终端上的发布客户端可以向该服务器发送包含有主题的发布消息,这样服务器可以向订阅了发布消息中包含的主题的订阅客户端发送该发布消息。且MQTT协议具有轻巧、开放、简单、规范等特点,可以应用于机器与机器的通信(machine-to-machine,M2M)、物联网(internet ofthings,IOT)等受限的环境中。
在IOT环境中,订阅终端上的订阅客户端通常用于通过发布终端上的发布客户端管理大量发布终端。一个订阅客户端可以通过一个包含有通配符的主题来订阅IOT环境中的所有发布客户端发布的消息,并对接收到的所有发布消息进行扇入(fan in)处理,扇入的过程为:订阅客户端可以对所有发布消息进行汇聚、统计等复杂运算,并将运算结果形成图标或页面呈现给用户,或将运算结果发送至下一层设备。显而易见的,此时订阅客户端处理发布消息的压力与发布客户端的数量成正比,但是订阅客户端处理发布消息的能力是有限的,因此当发布客户端的数量达到一定规模时,一个订阅客户端无法处理所有的发布消息,便需要增加订阅客户端,与该订阅客户端并行处理发布消息。此时,订阅客户端从“能订阅哪些发布消息”变为“能处理哪些发布消息”,这样订阅客户端如何订阅能处理的发布消息便成为了关键。现有技术中提供了两种订阅客户端订阅能处理的发布消息的方案:
在现有技术一中,订阅客户端可以根据处理发布消息的能力,逐个订阅每个发布客户端的发布消息,即订阅客户端能够处理几条发布消息,便向服务器发送几个订阅主题,每个订阅主题中都不包含通配符。
在现有技术二中,订阅客户端将不同的发布客户端划分到不同的区域中,使得发布客户端在发布主题中携带区域标识,同时订阅客户端根据订阅客户端处理发布消息的能力确定能处理哪些区域的发布消息,并在订阅主题中增加这些区域标识。
现有技术中至少存在以下问题:
现有技术一中,由于订阅客户端需要向服务器逐个发送订阅主题,使得在订阅客户端扩容、迁移等的情况下,需要更改订阅客户端的订阅关系,即订阅客户端先取消订阅再重新订阅,因此导致订阅客户端上的订阅关系维护较困难。
现有技术二中,由于区域是由订阅客户端划分的,在订阅客户端扩容、迁移等的情况下,订阅客户端需要重新划分区域并发布订阅消息,因此导致订阅客户端上的订阅关系维护较困难。
发明内容
本申请提供一种订阅发布方法及服务器,解决了在订阅客户端订阅能处理的发布消息的情况下,订阅客户端上的订阅关系维护较困难的问题。
为达到上述目的,本申请采用了权利要求书中提供的技术方案。
本申请的第一方面,提供一种订阅发布方法,包括:服务器可以接收发布客户端发送的包括有主题名的发布消息,并根据接收到的发布消息获取该发布客户端的标识,且服务器可以根据该发布消息中的主题名查找订阅树,获得订阅客户端的标识,并根据该订阅客户端的标识以及第一映射表获取与该订阅客户端的标识对应的第一标签,以及根据发布客户端的标识以及第一映射表获取与发布客户端的标识对应的第二标签,且服务器将获取的第一标签与第二标签进行匹配,并在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。其中,订阅树为至少一个主题过滤器组成的拓扑结构,订阅客户端的标识为与主题名匹配成功的一个主题过滤器对应的标识。第一映射表的每个表项包括客户端的标识与对应的标签。标签用于指示与标签对应的客户端的至少一种属性信息。
本申请提供的订阅发布方法,服务器在接收到发布客户端发送的包括有主题名的发布消息,并根据发布消息获取到该发布客户端的标识后,可以根据主题名查找订阅树,获得与主题名匹配成功的一个主题过滤器对应的订阅客户端的标识,并在根据订阅客户端的标识和第一映射表获取到第一标签,根据发布客户端的标识和第一映射表获取到第二标签后,将第一标签和第二标签进行匹配,且服务器在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。本申请中预先在服务器中存储记录了客户端标识与标签的对应关系的第一映射表,服务器可以在主题名与主题过滤器匹配成功的情况下,匹配发布客户端和订阅客户端的属性信息,并在发布客户端与订阅客户端的属性信息匹配成功时,向订阅客户端发送发布消息。这样,在订阅客户端迁移,扩容时,订阅客户端也不需要重新发布订阅消息,仅更改客户端的属性信息即可,从而解决了订阅客户端自己维护订阅关系导致的维护困难的问题。且,本申请中客户端的属性信息为包括有区域的多种信息,与现有技术中仅能匹配区域相比,可以使订阅客户端获得更多维度的发布消息,即实现更多维度的订阅,扩展性更好。
结合第一方面,在一种可能的实现方式中,服务器根据订阅客户端的标识以及第一映射表获取与订阅客户端的标识对应的第一标签,具体的可以包括:服务器在确定订阅客户端支持标签匹配的情况下,根据订阅客户端的标识以及第一映射表获取第一标签。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,本申请还可以包括:服务器在确定订阅客户端不支持标签匹配的情况下,可以向订阅客户端发送发布消息。这样,由于客户端的标签是维护在服务器中的,与现有技术二中的在主题中携带区域标识相比,实现了现有技术中原有的仅支持主题匹配的订阅发布机制的保留。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在服务器根据主题名查找订阅树,获得订阅客户端的标识之前,还可以包括:服务器接收订阅客户端发送的包括有至少一个主题过滤器的订阅消息,并根据接收到的订阅消息获取订阅客户端的标识。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,每个主题过滤器被分为多层,每层为一个主题层级,每个主题层级存储于所述订阅树的一个子树中,本申请还可以包括:服务器可以在确定至少一个主题过滤器中的第一主题过滤器支持标签匹配时,将第一主题过滤器关联到订阅树上,并在订阅树中存储有第一主题过滤器的最后一个主题层级的子树中保存订阅客户端的信息,该订阅客户端的信息可以包括:订阅客户端的标识和用于指示订阅客户端支持标签匹配的指示信息。其中,第一主题过滤器为至少一个主题过滤器中的任意一个。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,订阅消息中还可以包括:第一标志位。该第一标志位包括第一值或者第二值,第一值用于指示至少一个主题过滤器中的每个主题过滤器支持标签匹配,第二值用于指示至少一个主题过滤器中包括至少一个不支持标签匹配的主题过滤器。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,确定至少一个主题过滤器中的第一主题过滤器支持标签匹配,具体的可以包括:服务器可以在确定第一标志位包括第一值时,确定第一主题过滤器支持标签匹配。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,订阅消息中还可以包括:至少一个主题过滤器中每个主题过滤器对应的第二标志位,每个第二标志位可以包括第三值或第四值,第三值用于指示与第二标志位对应的主题过滤器支持标签匹配,第四值用于指示与第二标志位对应的主题过滤器不支持标签匹配。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,确定至少一个主题过滤器中的第一主题过滤器支持标签匹配,具体的可以包括:服务器可以在确定第一标志位包括第二值,且确定与第一主题过滤器对应的第二标志位包括第三值时,确定第一主题过滤器支持标签匹配。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,本申请还可以包括:服务器可以根据订阅客户端的标识、第一主题过滤器以及第二映射表获取与第一主题过滤器对应的标识信息,每个标识信息包括第五值或第六值,第五值用于指示与标识信息对应的主题过滤器支持标签匹配,第六值用于指示与标识信息对应的主题过滤器不支持标签匹配。此时,相应的,确定至少一个主题过滤器中的第一主题过滤器支持标签匹配,具体的可以包括:服务器可以在确定与第一主题过滤器对应的标识信息包括第五值时,确定第一主题过滤器支持标签匹配。其中,第二映射表的每个表项包含客户端的标识,与客户端的标识对应的至少一个主题过滤器,以及至少一个主题过滤器中每个主题过滤器对应的标识信息。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,确定订阅客户端支持标签匹配,具体的可以包括:服务器可以在确定存储有所述订阅客户端的标识的子树中还存储有用于指示所述订阅客户端支持标签匹配的指示信息时,确定订阅客户端支持标签匹配。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,属性信息包含属性名称和属性值,服务器将第一标签与第二标签进行匹配,具体的可以包括:服务器可以将第一标签包括的每种属性信息的属性值分别与第二标签包括的对应的属性信息的属性值进行比较,并确定第一标签包括的每种属性信息的属性值是否分别与第二标签包括的对应的属性信息的属性值符合预设的逻辑关系。此时,相应的,确定第一标签和第二标签匹配成功,具体的可以包括:服务器可以在确定第一标签包括的每种属性信息的属性值分别与第二标签包括的对应的属性信息的属性值符合预设的逻辑关系的情况下,确定第一标签和第二标签匹配成功。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,服务器在运行时,可以通过管理标签的通信接口动态更新与客户端的标识对应的标签。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,在主题过滤器的支持标签匹配的情况发生改变时,通过通信接口动态调整会话管理模块中与该主题过滤器对应的标识信息,并相应更改订阅树上相应的订阅客户端的标识。这样,通过在服务器中管理主题过滤器支持标签匹配的情况,实现了订阅消息中的主题过滤器与支持标签匹配情况的分离,使得在主题过滤器保持不变,改变该主题过滤器支持标签匹配的情况下,可以调整服务器中与该主题过滤器对应的标识信息,而不需要订阅客户端先取消订阅再重新订阅该主题过滤器。
结合第一方面和上述可能的实现方式,在另一种可能的实现方式中,本申请还可以包括:服务器可以接收第二订阅客户端发送的包括有至少一个主题过滤器的第二订阅消息,并根据接收到的第二订阅消息获取第二订阅客户端的标识,且获取预先存储的包括有主题名的持久化消息。这样,服务器便可以根据持久化消息中包括的主题名查找订阅树,获得与持久化消息的主题名匹配成功的主题过滤器对应的第二订阅客户端的标识,并根据持久化消息获取第二发布客户端的标识。且服务器可以根据第二发布客户端的标识以及第一映射表,获取与第二发布客户端的标识对应的第三标签,并根据第二订阅客户端的标识以及第一映射表,获取与第二订阅客户端的标识对应的第四标签,且服务器可以将第三标签与第四标签进行匹配,并在确定第三标签和第四标签匹配成功的情况下,向第二订阅客户端发送持久化消息。其中,持久化消息为持久化的发布消息。
本申请的第二方面,提供一种服务器,该服务器可以包括能够实现上述第一方面及其各实施方式中的方法的模块。
本申请的第三方面,提供一种服务器,该服务器包括:处理器、存储器、通信接口和通信总线。存储器用于存储计算机可执行指令,处理器、通信接口与存储器通过通信总线连接,当服务器运行时,处理器执行存储器存储的计算机可执行指令,以使服务器执行如第一方面或第一方面的可能的实现方式中任意一项的订阅发布方法。
本申请的第四方面,提供一种计算机存储介质,用于存储上述服务器所用的计算机软件指令,该计算机软件指令包含用于执行上述订阅发布方法所设计的程序。
附图说明
图1为本申请实施例提供的一种可以应用本申请实施例的系统架构的简化示意图;
图2为本申请实施例提供的一种订阅发布方法的流程图;
图3为本申请实施例提供的另一种订阅发布方法的流程图;
图4为本申请实施例提供的一种固定头部的格式示意图;
图5为本申请实施例提供的一种载荷的格式示意图;
图6为本申请实施例提供的一种订阅树的拓扑结构图;
图7为本申请实施例提供的一种逐层进行主题匹配的流程图;
图8为本申请实施例提供的一种服务器的组成示意图;
图9为本申请实施例提供的另一种服务器的组成示意图;
图10为本申请实施例提供的另一种服务器的组成示意图。
具体实施方式
为了解决在订阅客户端订阅能处理的发布消息的情况下,订阅客户端上的订阅关系较难维护的问题,本申请实施例提供一种订阅发布方法,其基本原理是:服务器接收发布客户端发送的包括有主题名的发布消息,并根据接收到的发布消息获取该发布客户端的标识,且服务器根据主题名查找订阅树,获得订阅客户端的标识,并根据订阅客户端的标识以及第一映射表获取与订阅客户端的标识对应的第一标签,以及根据该发布客户端的标识以及第一映射表获取与发布客户端的标识对应的第二标签,且服务器可以将第一标签与第二标签进行匹配,并在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。其中,订阅树为至少一个主题过滤器组成的拓扑结构,订阅客户端的标识为与主题名匹配成功的一个主题过滤器对应的标识,第一映射表的每个表项包含客户端的标识与对应的标签,标签用于指示与标签对应的客户端的至少一种属性信息。
本申请中预先在服务器中存储记录了客户端标识与标签的对应关系的第一映射表,服务器可以在主题名与主题过滤器匹配成功的情况下,匹配发布客户端和订阅客户端的属性信息,并在发布客户端与订阅客户端的属性信息匹配成功时,向订阅客户端发送发布消息。这样,在订阅客户端迁移,扩容时,订阅客户端也不需要重新发布订阅消息,仅更改客户端的属性信息即可,从而解决了订阅客户端自己维护订阅关系导致的维护困难的问题。且,本申请中客户端的属性信息为包括有区域的多种信息,与现有技术中仅能匹配区域相比,可以使订阅客户端获得更多维度的发布消息,即实现更多维度的订阅,扩展性更好。
为了便于本领域技术人员的理解,本申请实施例在此对本申请实施例中涉及到的基本术语进行说明。
1、主题:主题是订阅客户端和发布客户端之间的桥梁,主题可以包括主题名和主题过滤器,将包含在发布消息中的主题称为主题名,主题名中不能包含通配符,用于发布明确的主题;将包含在订阅消息中的主题称为主题过滤器,主题过滤器中可以包含通配符,用于同时订阅多个主题。在MQTT协议中,主题是一个结构化的、多层的结构,通过使用分隔符(/)将主题进行分层,每一层称之为主题层级。分隔符可以位于主题中的任意位置,相邻的分隔符用于表示空字符串的主题层级,即该主题层级的内容为空。示例性的,假设主题为:myhome/groundfloor/livingroom/temperature,其中,myhome、groundfloor、livingroom和temperature均为主题层级。
且,主题过滤器中包含的通配符可以包括多层通配符(multi-level wildcard)和单层通配符(single-level wildcard)。其中:
(1)多层通配符:用#表示,是用于匹配主题名中任意主题层级的通配符。多层通配符可以表示多个主题层级。多层通配符是主题过滤器的最后一个字符,示例性的,多层通配符可以位于某个主题层级,例如,主题过滤器为:#,多层通配符也可以跟在分隔符后面,例如,主题过滤器为:myhome/groundfloor/#,那么若存在如表1所示的主题名:
表1
主题名
1 myhome/groundfloor/livingroom/temperature
2 myhome/groundfloor/kitchen/temperature
3 myhome/groundfloor/kitchen/brightness
4 myhome/firstfloor/kitchen/temperature
5 myhome/groundfloor/kitchen/fridge/temperature
则与该主题过滤器匹配成功的主题名为:序号为1、2、3和5的主题名,与该主题过滤器匹配失败的主题名为:序号为4的主题名。
(2)单层通配符:用+表示,是用于匹配主题名中的单个主题层级的通配符。单层通配符是占据整个主题层级的通配符,其可以位于主题过滤器的任意主题层级,包括第一个主体层级和最后一个主体层级。且,一个主题过滤器中可以包含多个单层通配符,也可以同时包含多层通配符和单层通配符。
示例性的,假设包含单层通配符的主题过滤器为:myhome/groundfloor/+/temperature,那么表1所示的主题名中,与该主题过滤器匹配成功的主题名为:序号为1和2的主题名,与该主题过滤器匹配失败的主题名为:序号为3、4和5的主题名。
2、服务质量(quality of service,QoS):是指一个网络能够利用各种基础技术,为网络通信提供更好的服务能力。在MQTT协议中,可以提供三种等级的QoS,分别为QoS=0、1、2。
3、订阅树:为至少一个主题过滤器组成的拓扑结构。订阅树可以包括根节点和至少一层子树,每层子树包括至少一个子树。其中,根节点为逻辑节点,代表所有主题过滤器的根,每个子树中存储有主题过滤器的一个主题层级。与根节点连接的第一层子树为存储有第一个主题层级的子树,与第一层子树连接的第二层子树为存储有第一个主题层级下的第二个主题层级的子树,以此类推,直到最后一个主题层级。由一个第一层子树开始,根据连接到最后一层子树,每层子树中存储的主题层级可以组成一个主题过滤器。且,在每个存储有主题过滤器的最后一个主题层级的子树中存储有与该主题过滤器对应的订阅客户端的标识和用于指示该订阅客户端是否支持标签匹配的指示信息。
下面将结合附图对本申请实施例的实施方式进行详细描述。
图1为本申请实施例提供的一种可以应用本申请实施例的系统架构的简化示意图,如图1所示,该系统架构可以包括:至少一个发布终端11、订阅终端12和服务器13。在图1中以3个发布终端为例示出。
其中,至少一个发布终端11中每个发布终端上运行的发布客户端与服务器13通过MQTT协议进行通信,服务器13与订阅终端12上运行的订阅客户端通过MQTT协议进行通信,至少一个发布客户端与订阅客户端通过主题建立间接的联系。
发布终端11上运行有发布客户端,该发布客户端是支持MQTT协议的客户端,其可以作为消息的生成者。发布终端11可以为温度传感器、湿度传感器、电表、水表等。在图1中以发布终端11为电表为例示出。
在一种可能的实现方式中,发布终端11可以直接接入服务器13。在另一种可能的实现中,发布终端11可以通过一个物联网网关(gateway)接入服务器13,此时,该物联网网关可以作为网桥(bridge),用于对发布终端11上运行的发布客户端和服务器13之间交互的消息进行协议或数据格式的转换,或者,该物联网网关也可以作为发布终端11的代理,使得发布终端11上运行的发布客户端能够通过物联网网关向服务器13发送发布消息。
订阅终端12上运行有订阅客户端,该订阅客户端是支持MQTT协议的客户端,其可以作为发布消息的消费者或者管理者。订阅终端12可以为手机、平板电脑、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personal digital assistant,PDA)、膝上型轻便电脑(laptop)等。在本申请实施例中以订阅终端12为手机为例示出。
服务器13上运行有MQTT协议的服务端,是订阅发布机制的执行主体。在具体的实现中,多个服务器13可以组成集群,且多个服务器13之间可以进行订阅发布,即某一服务器可以作为一个订阅客户端向另一服务器发送订阅消息,并在接收到发布消息后向与该服务器连接的订阅客户端发送发布消息。
需要说明的是,在本申请实施例中,发布终端也可以作为订阅终端,此时相应的,订阅终端便作为发布终端,本申请实施例在此对发布终端和订阅终端的具体形式不做限定。
另外,在本申请实施例中,服务器可以根据订阅客户端的标识向订阅终端上运行的订阅客户端发送发布消息。
图2为本申请实施例提供的一种订阅发布方法的流程图,如图2所示,该方法可以包括:
201、发布客户端向服务器发送发布消息。
其中,在发布终端上运行的发布客户端的用户名和密码通过认证、服务器保存了发布客户端的会话以及与会话对应的发布客户端的标识的情况下,发布客户端可以向服务器发送发布消息,该发布消息中可以包括主题名。
示例性的,假设发布终端为温度传感器,那么该温度传感器上运行的客户端可以将主题名,例如主题名为:thermometer/temperature,以及该温度传感器采集到的温度值包括在发布消息中,并向服务器发送该发布消息。
202、服务器接收发布客户端发送的发布消息,并根据发布消息获取发布客户端的标识。
其中,在发布客户端向服务器发送了发布消息之后,服务器便可以接收发布消息,并在确定具有发布权限后,根据接收到发布消息的会话获取与该会话对应的发布客户端的标识。
203、服务器根据主题名查找订阅树,获得订阅客户端的标识。
其中,订阅客户端的标识为与主题名匹配成功的一个主题过滤器对应的标识。在服务器获取到发布客户端的标识之后,服务器可以根据该发布消息中包括的主题名查找订阅树,获得一个与主题名匹配成功的主题过滤器,并在存储有该主题过滤器的最后一个主题层级的子树中获取订阅客户端的标识,该订阅客户端的标识可以是多个。
为了在实现发布消息的按需分流时,解决订阅客户端上的订阅关系较难维护的问题,可以将主题与客户端的属性信息分离,且将客户端的属性信息,即标签预先存储在服务器中,在服务器获取到订阅客户端的标识后,服务器可以在确定发布客户端的标签和订阅客户端的标签匹配成功的情况下,向订阅客户端发送发布消息。具体的,针对多个订阅客户端的标识中的每个订阅客户端的标识,可以执行以下步骤204-步骤206:
204、服务器根据订阅客户端的标识以及第一映射表获取与订阅客户端的标识对应的第一标签,并根据发布客户端的标识以及第一映射表获取与发布客户端的标识对应的第二标签。
其中,标签用于指示与该标签对应的客户端的至少一种属性信息。
服务器可以根据订阅客户端的标识和第一映射表,获取与订阅客户端的标识对应的第一标签,并根据发布客户端的标识和第一映射表,获取与发布客户端的标识对应的第二标签。第一映射表的每个表项包含客户端的标识与对应的标签,该客户端的标识可以是订阅客户端的标识,也可以是发布客户端的标识。
需要说明的是,在本申请实施例中,标签可以是在客户端向服务端注册时,运行有MQTT协议的服务端的服务器获取到的,也可以是管理员添加在服务器的标签管理(tagsmanager)模块中的。本申请实施例在此对标签存储在服务器中的具体方式不做限定。且在本申请实施例中,服务器在运行时,可以通过管理标签的通信接口动态更新与客户端的标识对应的标签,使得不需要更改订阅关系,便可以实现发布消息的按需分流,与现有技术中的客户端在扩容、迁移时需要重新更改订阅关系相比,解决了订阅客户端上的订阅关系较难维护的问题。
205、服务器将第一标签与第二标签进行匹配。
其中,在服务器获取到第一标签和第二标签之后,可以将第一标签与第二标签进行匹配,即将发布客户端的至少一种属性信息和订阅客户端的至少一种属性信息进行匹配。在本申请实施例中,发布客户端的属性信息的种类数量和订阅客户端的属性信息的种类数量是相同的,服务器可以将种类相同的属性信息进行匹配,只有在所有种类的属性信息均匹配成功的情况下,才能确定第一标签和第二标签匹配成功。如果第一标签和第二标签匹配成功,则可以执行以下步骤206,如果第一标签和第二标签匹配失败,则服务器可以判断是否还有下一个订阅客户端,如果还有下一个订阅客户端,则可以重复执行步骤204-步骤205。
206、服务器向订阅客户端发送发布消息。
需要说明的是,对于与主题名匹配成功的一个主题过滤器对应的标识,服务器执行了步骤204-步骤206之后,服务器可以继续获取能够与主题名匹配成功的其他主题过滤器,每获取到一个匹配成功的主题过滤器,便可以在存储有该主题过滤器的最后一个主题层级的子树中获取到多个订阅客户端的标识,此时针对该多个订阅客户端的标识,便可以重复执行步骤204-步骤206,直到服务器获取到最后一个与主题名匹配的主题过滤器,并向最后一个订阅客户端发送了发布消息。
本申请实施例提供的订阅发布方法,服务器在接收到发布客户端发送的包括有主题名的发布消息,并根据发布消息获取到该发布客户端的标识后,根据发布消息中的主题名查找订阅树,获得与主题名匹配成功的一个主题过滤器对应的订阅客户端的标识,且服务器在根据订阅客户端的标识和第一映射表获取到第一标签,根据该发布客户端的标识和第一映射表获取到第二标签后,可以将第一标签和第二标签进行匹配,并在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。本申请中预先在服务器中存储记录了客户端标识与标签的对应关系的第一映射表,服务器可以在主题名与主题过滤器匹配成功的情况下,匹配发布客户端和订阅客户端的属性信息,并在发布客户端与订阅客户端的属性信息匹配成功时,向订阅客户端发送发布消息。这样,在订阅客户端迁移,扩容时,订阅客户端也不需要重新发布订阅消息,仅更改客户端的属性信息即可,从而解决了订阅客户端自己维护订阅关系导致的维护困难的问题。且,本申请中客户端的属性信息为包括有区域的多种信息,与现有技术中仅能匹配区域相比,可以使订阅客户端获得更多维度的发布消息,即实现更多维度的订阅,扩展性更好。
图3为本申请实施例提供的另一种订阅发布方法的流程图,如图3所示,该方法可以包括:
301、订阅客户端向服务器发送订阅消息。
其中,在服务器的访问控制列表(access control list,ACL)模块对订阅终端上运行的订阅客户端的用户名和密码通过认证、在会话管理模块中保存了订阅客户端的会话以及与该会话对应的订阅客户端的标识的情况下,订阅客户端可以向服务器发送订阅消息,该订阅消息中包括至少一个主题过滤器。
示例性的,假设订阅终端为手机,需要订阅温度传感器的温度和电表的用电量,那么该手机上运行的客户端可以将两个主题过滤器,例如两个主题过滤器分别为:thermometer/+、ammeters/#,包括在订阅消息中,并向服务器发送该订阅消息。
当然,在具体的实现中,会有多个订阅客户端向服务器发送订阅消息,每个订阅消息中包括至少一个主题过滤器。示例性的,假设有8个订阅客户端向服务器发送订阅消息,如表2的第二列所示,为订阅消息中包括的主题过滤器。
表2
Figure BDA0002595473280000081
Figure BDA0002595473280000091
需要说明的是,为了在实现发布消息的按需分流的同时,能够保留现有的仅支持主题匹配的机制,可以标示出订阅消息中的主题过滤器是否支持标签匹配。在本申请实施例中,可以采用以下两种方式标示主题过滤器是否支持标签匹配。
方式1,通过订阅消息中的标志位来指示主题过滤器是否支持标签匹配。
示例性的,订阅客户端可以将订阅消息的保留字段(reserved)设置为标志位,用于指示订阅消息中包括的主题过滤器是否支持标签匹配。在本申请实施例中,订阅消息包括头部和载荷两部分,其中头部包括固定头部和可变头部,可变头部与消息类型(消息类型包括订阅消息、发布消息等)有关,对于所有的订阅消息来说,可变头部的格式是固定的。图4为固定头部的格式示意图,如图4所示,固定头部包括两个字节(byte),其中字节1的第4到第7比特(bit)为MQTT控制包类型(MQTT control packet type),字节2为剩余长度(remaining length),字节1的第0到第3比特为保留字段,订阅客户端可以将其中任意一个保留字段设置为第一标志位,该第一标志位可以包括第一值或者第二值,第一值用于指示至少一个主题过滤器中的每个主题过滤器支持标签匹配,第二值用于指示至少一个主题过滤器中包括至少一个不支持标签匹配的主题过滤器。
图5为载荷的格式示意图,如图5所示,载荷中包括至少一个主题过滤器,在图5中以一个主题过滤器为例示出,字节1到字节N表示一个主题过滤器,其中,字节1表示最高有效位(most significant bit,MSB),字节2表示最低有效位(least significant bit,LSB),字节3到字节N表示主题过滤器的分层结构,字节N+1中的第0和1比特表示与该主题过滤器对应的QoS标识,字节N+1的第2到7比特为保留字段,订阅客户端可以将其中任意一个保留字段设置为第二标志位,第二标志位可以包括第三值或者第四值,第三值用于指示与该第二标志位对应的主题过滤器支持标签匹配,第四值用于指示与该第二标志位对应的主题过滤器不支持标签匹配。
需要说明的是,在本申请实施例中,值的取值可以是:0或1,在一种可能的实现方式中,第一值的取值为1,第二值的取值为0,在另一种可能的实现方式中,第一值的取值为0,第二值的取值为1。且,在一种可能的实现方式中,第三值的取值为1,第四值的取值为0,在另一种可能的实现方式中,第三值的取值为0,第四值的取值为1。需要说明的是,值的具体取值可以根据实际应用场景的需求进行设置,本申请实施例在此不做具体限制。在本申请实施例中以第一值的取值为1,第二值的取值为0,第三值的取值为1,第四值的取值为0为例进行说明。
方式2,通过用于管理主题过滤器的通信接口将主题过滤器以及与主题过滤器对应的标识信息存储在服务器中。
示例性的,在本申请实施例中,可以通过用于管理主题过滤器的通信接口预先将主题过滤器以及与主题过滤器一一对应的标识信息存储在服务器中。标识信息可以包括第五值或第六值。其中,第五值用于指示与标识信息对应的主题过滤器支持标签匹配,第六值用于指示与标识信息对应的主题过滤器不支持标签匹配。
302、服务器接收订阅客户端发送的订阅消息,并根据订阅消息获取订阅客户端的标识。
其中,在订阅客户端向服务器发送了订阅消息之后,服务器的ACL模块可以在确定订阅客户端具有订阅的权限后,根据接收到订阅消息的会话获取与该会话对应的订阅客户端的标识,并指示订阅服务(subscribe service)模块对订阅消息进行处理。
示例性的,假设服务器根据会话获取到的订阅客户端的标识为C1,如表2的第一列所示。
303、服务器在确定至少一个主题过滤器中的第一主题过滤器支持标签匹配时,将第一主题过滤器关联到订阅树上,并在订阅树中存储有第一主题过滤器的最后一个主题层级的子树中保存订阅客户端的信息。
其中,第一主题过滤器为至少一个主题过滤器中的任意一个,订阅客户端的信息包括订阅客户端的标识和用于指示订阅客户端支持标签匹配的指示信息。在服务器的订阅服务模块接收到来自ACL模块的指示后,订阅服务模块可以判断订阅消息中包括的至少一个主题过滤器中的每个主题过滤器是否支持标签匹配,对于任意一个主题过滤器,如第一主题过滤器,服务器可以在确定第一主题过滤器支持标签匹配时,向订阅服务模块中包括的第一订阅处理模块发送一指示,第一订阅处理模块便可以在接收到指示后,将第一主题过滤器关联到订阅树上,并在存储有第一主题过滤器的最后一个主题层级的子树中保存订阅客户端的标识和用于指示该订阅客户端支持标签匹配的指示信息。服务器可以在确定第一主题过滤器不支持标签匹配时,向第二订阅处理模块发送一指示,第二订阅处理模块可以在接收到该指示后,将第一主题过滤器关联到订阅树上,并在存储有第一主题过滤器的最后一个主题层级的子树中保存订阅客户端的标识和用于指示该订阅客户端不支持标签匹配的指示信息。
需要说明的是,在服务器未接收到任何订阅消息之前,预先保存有仅包含根节点的订阅树,这样,每次接收到订阅消息,便可将订阅消息中包含的主题过滤器关联到订阅树上。
且,在本申请实施例中可以采用以下三种方式确定第一主题过滤器支持标签匹配。
方式1,服务器在确定第一标志位包括第一值时,确定第一主题过滤器支持标签匹配。
示例性的,按照步骤402中方式1标示主题过滤器是否支持标签匹配的方式,订阅服务模块可以判断第一标志位包括第一值还是第二值。如果第一标志位包括第一值,则表明订阅消息中包括的至少一个主题过滤器均支持标签匹配,此时,第一订阅处理模块可以将至少一个主题过滤器逐个关联到订阅树上,并在存储有每个主题过滤器的最后一个主题层级的子树中保存订阅客户端的标识和用于指示该订阅客户端支持标签匹配的指示信息。如果第一标志位包括第二值,则表明至少一个主题过滤器中包括至少一个不支持标签匹配的主题过滤器,此时,可以采用以下方式2确定第一主题过滤器支持标签匹配。
方式2,服务器在确定第一标志位包括第二值,且确定与第一主题过滤器对应的第二标志位包括第三值时,确定第一主题过滤器支持标签匹配。
示例性的,如果第一标志位包括第二值,则订阅服务模块可以判断与第一主题过滤器对应的第二标志位是否包括第三值。如果该第二标志位包括第三值,则确定第一主题过滤器支持标签匹配,如果该第二标志位包括第四值,则确定第一主题过滤器不支持标签匹配。
需要说明的是,可以预先设置第一标志位和第二标志位分别在保留字段的哪个比特上,并将第一标志位和第二标志位的具体位置配置在服务器中。
另外,将第一主题过滤器关联到订阅树的过程为:根据第一主题过滤器的分层情况,判断订阅树的第一个主题层级中是否包含第一主题过滤器的第一个主题层级,如果不包含,则将该第一个主题层级与根节点连接,然后依次将第一主题过滤器的第二个主题层级,…,最后一个主题层级进行连接,如果包含,则判断订阅树该第一个主题层级下连接的第二个主题层级中是否包含第一主题过滤器的第二个主题层,如果不包含,则将该第二个主题层级与订阅树的该第一个主题层级连接,然后依次将第一主题过滤器的第三个主题层级,…,最后一个主题层级进行连接,如果包含,则继续判断订阅树的该第二主题层级下连接的第三个主题层级中是否包含第一主题过滤器的第三个主题层级,直到将第一主题过滤器的最后一个主题过滤器连接到订阅树上。
示例性的,按照步骤301中的表2所示,假设服务器首次接收到的订阅消息是标识为C1的订阅客户端发送的,该订阅消息中包括的主题过滤器为thermometer/+和ammeters/#,且该订阅消息的第一标志位为1,那么服务器可以先将主题过滤器thermometer/+的第一个主题层级thermometer与根节点连接,并将第二个主题层级+与第一个主题层级thermometer连接,然后将主题过滤器ammeters/#的第一个主题层级ammeters与根节点连接,并将第二个主题层级#与第一个主题层级ammeters连接,且在第二个主题层级+和#中分别保存C1和用于指示C1支持标签匹配的指示信息,为了便于区分,以C1支持标签匹配为C1’,C1不支持标签匹配为C1为例示出,其余标识也类似。假设服务器接收到的标识为C2的订阅客户端的订阅消息的第一标志位为0,第二标志位为1,那么服务器可以将主题过滤器ammeters/5678的第二个主题层级5678关联到订阅树中的ammeters下,并在第二个主题层级567890中保存C2’。假设服务器接收到的标识为C3的订阅客户端的订阅消息的第一标志位为0,第二标志位为0,那么服务器可以将主题过滤器thermometer/1234的第二个主题层级1234关联到订阅树中的第一个主题层级thermometer下,并在第二个主题层级1234中保存C3。假设服务器接收到的标识为C6的订阅客户端的订阅消息的第一标志位为0,与主题过滤器thermometer/1234对应的第二标志位为1,与主题过滤器ammeters/5678对应的第二标志位为0,那么服务器可以在订阅树的第一个主题层级thermometer下的第二个主题层级123456中保存C6’,并在订阅树的第一个主题层级ammeters下的第二个主题层级567890中保存C6。假设服务器接收到的标识为C8的订阅客户端的订阅消息的第一标志位为0,与主题过滤器thermometer/+对应的第二标志位为0,与主题过滤器ammeters/+对应的第二标志位为0,那么服务器可以在订阅树的第一个主题层级thermometer下的第二个主题层级+中保存C8,并将第二个主题层级+与订阅树中的第一个主题层级ammeters连接,在订阅树的第一个主题层级ammeters下的第二个主题层级+中保存C8。假设服务器接收到的标识为C4的订阅客户端、标识为C5的订阅客户端和标识为C7的订阅客户端的订阅消息的第一标志位均为1,那么服务器可以在订阅树的第一个主题层级thermometer下的第二个主题层级+中保存C4’和C7’,在订阅树的第一个主题层级ammeters下的第二个主题层级#中保存C5’。最后的订阅树如图6所示,且在图6中以thermometer为温度传感器,ammeters为电表示出。
方式3,服务器在确定与第一主题过滤器对应的标识信息包括第五值时,确定第一主题过滤器支持标签匹配。
示例性的,按照步骤402中方式2标示主题过滤器是否支持标签匹配的方式,订阅服务模块可以根据订阅客户端的标识、第一主题过滤器以及会话管理模块中存储的第二映射表,获取与第一主题过滤器对应的标识信息。该第二映射表的每个表项包含客户端的标识,与客户端的标识对应的至少一个主题过滤器,以及至少一个主题过滤器中每个主题过滤器对应的标识信息。
例如,如表3所示,为会话管理模块中存储的第二映射表,在此以标识信息包括的第五值为1,第六值为0为例示出。
表3
Figure BDA0002595473280000121
假设订阅客户端的标识为C1,第一主题过滤器为ammeters/#,则订阅服务器模块获取到的与第一主题过滤器ammeters/#对应的标识信息为1,此时,订阅服务模块确定第一主题过滤器支持标签匹配。
需要说明的是,在主题过滤器的支持标签匹配的情况发生改变时,可以通过通信接口动态调整会话管理模块中与该主题过滤器对应的标识信息,并相应更改订阅树上相应的指示信息。具体的,在第一主题过滤器由支持标签匹配改变为不支持标签匹配的情况下,可以将与第一主题过滤器对应的标识信息由第五值调整为第六值,并将存储有第一主题过滤器的最后一个主题层级的子树中的用于指示该订阅客户端支持标签匹配的指示信息替换为用于指示该订阅客户端不支持标签匹配的指示信息,在第一主题过滤器由不支持标签匹配改变为支持标签匹配的情况下,可以将与第一主题过滤器对应的标识信息由第六值调整为第五值,并将存储有第一主题过滤器的最后一个主题层级的子树中的用于指示该订阅客户端不支持标签匹配的指示信息替换为用于指示该订阅客户端支持标签匹配的指示信息。这样,通过在服务器中管理主题过滤器支持标签匹配的情况,实现了订阅消息中的主题过滤器与支持标签匹配情况的分离,使得在主题过滤器保持不变,改变该主题过滤器支持标签匹配的情况下,可以调整服务器中与该主题过滤器对应的标识信息,而不需要订阅客户端先取消订阅再重新订阅该主题过滤器。
304、发布客户端向服务器发送发布消息。
其中,发布消息中包括主题名和QoS标识。且发布消息中可以包括持久化标识,或者,也可以不包括持久化标识。所述持久化标识用于指示服务器存储所述发布消息。
305、服务器接收发布客户端发送的发布消息,并根据发布消息获取发布客户端的标识。
其中,在接收到发布客户端发送的发布消息之后,服务器的ACL模块可以在确定具有发布的权限后,根据接收到发布消息的会话获取与该会话对应的发布客户端的标识,并向发布服务(publish service)模块发送一指示,发布服务模块可以在接收到该指示后,根据QoS标识向发布客户端返回响应消息,并在发布客户端的会话中将该发布消息保存一段时间。如果发布消息中包括持久化标识,那么发布服务模块可以指示持久化模块将该发布消息保存到磁盘、磁带等中,以便服务器在接收到订阅客户端发送的订阅消息后,可以在确定订阅客户端订阅了某条持久化消息后,将该持久化消息发送至订阅客户端,而不需要等到服务器接收到新的发布消息后,才向订阅客户端发送该新的发布消息。
需要说明的是,本申请实施例中,在步骤402服务器接收到订阅客户端发送的订阅消息,并根据订阅消息获取到订阅客户端的标识后,可以先获取预先存储的至少一条持久化消息,并将订阅消息中包括的至少一个主题过滤器作为一颗订阅树,然后通过进行主题匹配和标签匹配,确定将哪些持久化消息发送至该订阅客户顿啊。其中,服务器根据任意一条持久化消息中包括的主题名查找订阅树,以及进行标签匹配的具体过程与以下步骤306-步骤310的描述类似,在此不再赘述。然后,服务器再将订阅消息中包括的至少一个主题过滤器关联到预先存储的订阅树上,并在接收到新的发布消息时,执行以下步骤306-步骤310。
306、服务器根据主题名查找订阅树,获得订阅客户端的标识。
其中,在服务器获取到发布客户端的标识之后,服务器的主题匹配模块可以逐层遍历订阅树中的主题层级,将主题名的主题层级与订阅树中对应的主题层级进行比较,以获得一个与主题名匹配成功的主题过滤器,并在该主题过滤器的最后一个主题层级中获取到订阅客户端的标识。
在具体的实现中,图7为逐层进行主题匹配的流程图,如图7所示,服务器的主题匹配模块可以逐层遍历订阅树中的主题层级,将主题名的主题层级与订阅树中对应的主题层级进行比较。对于第N个主题层级,服务器可以将主题名的第N个主题层级与订阅树中的所有第N个主题层级进行比较,先判断主题名的第N个主题层级的内容与订阅树的某第N个主题层级的内容是否相同,或者,判断订阅树的某第N个主题层级是否为+,如果主题名的第N个主题层级的内容与订阅树中的第N-1个主题层级下的第N个主题层级的内容相同,或者,如果订阅树中第N-1个主题层级下的某个第N个主题层级为+,则表明该层匹配成功,服务器可以判断订阅树该第N个主题层级下是否存在第N+1个主题层级,如果存在,则服务器继续进行下一个主题层级的匹配,如果不存在,则表明主题名与该主题过滤器匹配成功,服务器可以获取该到第N个主题层级中保存的订阅客户端的标识。否则,服务器判断订阅树的某第N个主题层级是否为#,如果订阅树中某第N个主题层级为#,则表明主题名与该主题过滤器匹配成功,服务器可以获取该第N个主题层级中保存的订阅客户端的标识。如果订阅树的该第N个主题层级不为#,则可以判断该第N个主题层级之后是否还有子树,如果有,则将主题名的第N个主题层级与该第N级主题层级匹配。且在获取到该第N个主题层级中保存的订阅客户端的标识之后,发布服务模块可以判断第N个主题层级之后是否还有子树,如果有,则将主题名的第N个主题层级与该第N级主题层级匹配。
例如,假设服务器接收到的主题名为thermometer/1234,则主题名的第一个主题层级thermometer与订阅树的第一个主题层级thermometer匹配成功,此时,服务器将主题名的第二个主题层级1234与订阅树的第一个主题层级thermometer下的第二个主题层级+匹配成功,获得的订阅客户端的标识为C1’、C4’、C7’和C8’。且服务器在确定订阅树的第一个主题层级thermometer下还有另一第二个主题层级1234,与主题名的第二个主题层级1234的内容相同,获得订阅客户端的标识为C3,C6’。服务器确定主题名的第一个主题层级与订阅树的另一第一个主题层级ammeters匹配失败。
再例如,假设服务器接收到的主题名为Thermometer/2345,则由于主题对字母的大小写敏感,使得主题名的第一个主题层级Thermometer与订阅树的第一个主题层级thermometer匹配失败。且主题名的第一个主题层级Thermometer与订阅树的第一个主题层级ammeters匹配失败。
再例如,假设服务器接收到的主题名为things/12/temp,则主题名的第一个主题层级things与订阅树的第一个主题层级thermometer和ammeters均匹配失败。
需要说明的是,为了在实现发布消息的按需分流时,解决订阅客户端上的订阅关系较难维护的问题,在服务器的主题匹配模块获得了订阅客户端的标识后,针对多个订阅客户端的标识中的任意一个订阅客户端的标识,可以执行以下步骤307-步骤310:
307、服务器确定存储有订阅客户端的标识的子树中还存储有用于指示订阅客户端支持标签匹配的指示信息。
其中,主题匹配模块可以判断存储有订阅客户端的标识的子树中是否还存储有用于指示该订阅客户端支持标签匹配的指示信息,如果确定存储有用于指示订阅客户端支持标签匹配的指示信息,则表明该订阅客户端支持标签匹配,此时可以执行以下步骤308。如果确定存储有用于指示订阅客户端不支持标签匹配的指示信息,则表明该订阅客户端不支持标签匹配,则主题匹配模块可以通过发布服务模块向该订阅客户端发送发布消息。这样,由于客户端的标签是维护在服务器中的,与现有技术二中的在主题中携带区域标识相比,实现了现有技术中原有的仅支持主题匹配的订阅发布机制的保留。
308、服务器根据订阅客户端的标识以及第一映射表获取与订阅客户端的标识对应的第一标签,并根据发布客户端的标识和第一映射表获取与发布客户端的标识对应的第二标签。
其中,标签用于指示与该标签对应的客户端的至少一种属性信息。在确定出存储有订阅客户端的标识的子树中还存储有用于指示该订阅客户端支持标签匹配的指示信息后,主题匹配模块可以指示标签管理模块从第一映射表中获取与订阅客户端的标识对应的第一标签,并获取与发布客户端的标识对应的第二标签。
需要说明的是,在本申请实施例中,第一映射表的每个表项中包括客户端的标识以及与客户端的标识对应的标签,标签用于指示客户端的至少一种属性信息。一种属性信息可以包含属性名称和属性值,其中,属性值可以是单个值,也可以是多个值,如数组或列表,也可以是标签引擎模块支持的逻辑表达式,还可以是基于JavaScript语言的轻量级的数据交换格式(JavaScript object notation)的内容。且客户端的属性信息除了唯一标识,对应关系中包含的属性信息外,还可以包括显示名称等。
且由于客户端包括发布客户端和订阅客户端,对于不同种类的客户端,标签中包含的属性值也是不同的。示例性的,如果发布客户端的属性值是多个值,则表示广播的含义,相当于多个发布客户端分别发布了两条发布消息,每个发布客户端的标签中分别包含了多个值中的一个。例如,假设发布客户端的一种属性信息的属性名称为域(zone),属性值为sz和nj,则相当于两个发布客户端发布了两条消息,两个发布客户端分别具有一种属性信息,为域=sz,域=nj。示例性的,如果订阅客户端的属性值是多个值,则表示包含的含义,若发布客户端的同种属性信息的属性值中存在一个值与订阅客户端的属性值相同,则订阅客户端的该种属性信息和发布客户端的该种属性信息匹配成功。例如,假设订阅客户端的一种属性信息的属性名称为域,属性值为sz和nj,相当于该订阅客户端同时订阅了域=sz的发布客户端和域=nj的发布客户端发布的消息。
309、服务器确定第一标签包括的每种属性信息的属性值是否分别与第二标签包括的对应的属性信息的属性值符合预设的逻辑关系。
其中,在标签管理模块获取到第一标签和第二标签后,可以向标签引擎(tagsengine)模块发送该第一标签和第二标签,标签引擎模块便可以确定第一标签包括的每种属性信息的属性值是否分别与第二标签包括的对应的属性信息的属性值符合预设的逻辑关系,只有在两个属性值符合预设的逻辑关系的情况下,确定该种属性信息匹配成功,且只有在所有种类的属性信息匹配成功的情况下,确定第一标签和第二标签匹配成功,并向发布服务模块返回匹配成功的结果,以便发布服务模块在接收到匹配成功的结果后向订阅客户端发送发布消息。
需要说明的是,在本申请实施例中,预设的逻辑关系与属性信息的种类有很大的关系,例如,该逻辑关系可以是不同属性值的包含关系。
310、服务器在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。
需要说明的是,在服务器向订阅客户端发送了发布消息之后,服务器可以判断是否还有订阅客户端的标识,如果还有订阅客户端的标识,则服务器可以重复执行步骤307-步骤310,如果没有订阅客户端的标识,则服务器可以判断同层的主题层级中是否还有子树,如果有,则重复执行步骤306-步骤310,直到获取到最后一个与主题名匹配成功的主题过滤器,从而获取到订阅客户端的标识,并向最后一个标签匹配成功的订阅客户端发送发布消息为止。
示例性的,在多租户的场景中,假设第一标签和第二标签中包括两种属性信息,分别为租户(tenant)和域,此时,标签引擎模块可以在确定订阅客户端的租户的属性值包含发布客户端的租户的属性值,且订阅客户端的域的属性值包含发布客户端的域的属性值的情况下,确定第一标签和第二标签匹配成功。例如,按照步骤306中的例子,假设服务器获取到的发布客户端的标识为t1,获得的订阅客户端的标识为C1’、C4’、C7’和C8’,如表4所示,为第一映射表中客户端的标识,以及与客户端的标识对应的标签,该标签包括租户和域。
表4
Figure BDA0002595473280000151
那么,服务器在获取到与C1对应的标签和与t1对应的标签后,确定C1的租户的属性值租户1包含t1的租户的属性值租户1,C1的域的属性值sz包含t1的域的属性值sz,则可以向标识为C1的订阅客户端发送发布消息。服务器确定还有订阅客户端的标识C4,则确定C4的租户的属性值租户2与t1的租户的属性值租户1不相等,不会向标识为C4的订阅客户端发送发布消息。服务器确定还有订阅客户端的标识C7,则确定C7的租户的属性值租户1包含t1的租户的属性值租户1,C7的域的属性值sz,nj包含t1的域的属性值sz,向标识为C7的订阅客户端发送发布消息。与C4类似,服务器不会向标识为C8的订阅客户端发送发布消息。
示例性的,在有优先级(priority)的场景中,属性的值可以是复杂的逻辑表达式,假设第一标签和第二标签中包括两种属性信息,分别为域和优先级,此时,标签引擎模块可以在确定发布客户端的域的属性值满足订阅客户端的域的属性值的逻辑表达式,且发布客户端的优先级的属性值满足订阅客户端的优先级的属性值的逻辑表达式的情况下,确定第一标签和第二标签匹配成功,并向订阅客户端发送发布消息。这样,通过进行优先级的匹配,实现了不同的订阅客户端处理不同优先级的发布消息。例如,假设存在订阅客户端A和订阅客户端B,如果订阅客户端A可以使用更快的网络,更多的资源,订阅客户端B使用的网络较慢,使用的资源较少,那么可以通过在标签管理模块中设置与订阅客户端A对应的标签中的优先级的属性值大于50,与订阅客户端B对应的标签中的优先级的属性值小于50,从而使得订阅客户端A可以处理优先级较高的发布消息,订阅客户端B处理优先级较低的发布消息。
例如,按照步骤306中的例子,假设服务器获取到的发布客户端的标识为t1,获得的订阅客户端的标识为C1’、C4’、C7’和C8’,如表5所示,为第一映射表中客户端的标识,以及与客户端的标识对应的标签,该标签包括域和优先级。
表5
Figure BDA0002595473280000152
Figure BDA0002595473280000161
且,本申请实施例在此对表5中涉及到的操作符进行介绍:$not:表示逻辑“非”,$eq:表示相等或包含,与$in类似($eq强调单值的包含,$in强调值是数组),$or:表示逻辑“或”,$and:表示逻辑“与”;$gt:表示大于,$ge:表示大于或等于,$lt:表示小于,$le:表示小于或等于。
那么,服务器可以在获取到与C1对应的标签和与t1对应的标签后,确定t1的域的属性值sz不满足C1的域的属性值的逻辑表达式{$not:{$eq:sz}},该逻辑表达式的含义为:包括除sz以外的域,不会向标识为C1的订阅客户端发送发布消息。
本申请实施例提供的订阅发布方法,服务器在接收到发布客户端发送的包括有主题名的发布消息,并根据发布消息获取到该发布客户端的标识后,根据该发布消息中的主题名查找订阅树,获得与主题名匹配成功的一个主题过滤器对应的订阅客户端的标识,且服务器在根据订阅客户端的标识和第一映射表获取到第一标签,根据该发布客户端的标识和第一映射表获取到第二标签后,可以将第一标签和第二标签进行匹配,并在确定第一标签和第二标签匹配成功的情况下,向订阅客户端发送发布消息。本申请中预先在服务器中存储记录了客户端标识与标签的对应关系的第一映射表,服务器可以在主题名与主题过滤器匹配成功的情况下,匹配发布客户端和订阅客户端的属性信息,并在发布客户端与订阅客户端的属性信息匹配成功时,向订阅客户端发送发布消息。这样,在订阅客户端迁移,扩容时,订阅客户端也不需要重新发布订阅消息,仅更改客户端的属性信息即可,从而解决了订阅客户端自己维护订阅关系导致的维护困难的问题。且,本申请中客户端的属性信息为包括有区域的多种信息,与现有技术中仅能匹配区域相比,可以使订阅客户端获得更多维度的发布消息,即实现更多维度的订阅,扩展性更好。
并且,服务器在确定订阅客户端的标识不是支持标签匹配的标识的情况下,向订阅客户端发送发布消息。这样,由于客户端的标签是维护在服务器中的,与现有技术二中的在主题中携带区域标识相比,实现了现有技术中原有的仅支持主题匹配的订阅发布机制的保留。通过在服务器中管理主题过滤器支持标签匹配的情况,实现了订阅消息中的主题过滤器与支持标签匹配情况的分离,使得在主题过滤器保持不变,改变该主题过滤器支持标签匹配的情况下,可以调整服务器中与该主题过滤器对应的标识信息,而不需要订阅客户端先取消订阅再重新订阅该主题过滤器。
上述主要从各个网元之间交互的角度对本申请实施例提供的方案进行了介绍。可以理解的是,服务器为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所公开的实施例描述的各示例的算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
本申请实施例可以根据上述方法示例对服务器进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。需要说明的是,本申请实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
在采用对应各个功能划分各个功能模块的情况下,图8示出了上述和实施例中涉及的服务器的一种可能的组成示意图,如图8所示,该服务器可以包括:接收模块41、获取模块42、发布服务模块43、标签管理模块44和标签引擎模块45,其中,发布服务模块43可以包括主题匹配模块431。
其中,接收模块41,用于执行图2所示的订阅发布方法中的步骤202中所述的接收发布客户端发送的发布消息,图3所示的订阅发布方法中的步骤302中所述的接收订阅客户端发送的订阅消息,步骤305中所述的接收发布客户端发送的发布消息。
获取模块42,用于执行图2所示的订阅发布方法中的步骤202中所述的根据发布消息获取发布客户端的标识,图3所示的订阅发布方法中的步骤302中所述的根据订阅消息获取订阅客户端的标识,步骤305中所述的根据发布消息获取发布客户端的标识。
发布服务模块43是处理发布消息的模块,用于执行图2所示的订阅发布方法中的步骤206,图3所示的订阅发布方法中的步骤310,即用于在接收到标签引擎模块45返回的匹配成功结果后,向订阅客户端发送发布消息,或者在接收到标签匹配模块432的指示后向订阅客户端发送发布消息。且发布服务模块43,还用于在接收到ACL模块48发送的指示后,对发布消息进行处理。具体的:如果发布消息中包含持久化标识,则发布服务模块43指示持久化模块49进行发布消息的持久化,也就是说,将发布消息以一定格式保存到硬盘、磁带等非易失介质中,以便于服务器在接收到订阅客户端发送的订阅消息后,可以在确定该订阅客户端订阅了该持久化的发布消息时,将该持久化的发布消息发送至该订阅客户端,而不需要等待接收到新的发布消息后才能向该订阅客户端发送新的发布消息。发布服务模块43,还用于根据发布消息中包含的QoS标识,向发布客户端返回响应消息,并在会话管理模块47中,与发布客户端的标识对应的会话中将该发布消息保存一段时间,以便订阅了该发布消息的订阅客户端在断开连接并重新连接到服务器时,发布服务模块43可以在确定订阅客户端订阅了发布消息时,向该订阅客户端发送发布消息。
主题匹配模块431,用于执行图2所示的订阅发布方法中的步骤203,图3所示的订阅发布方法中的步骤306,即用于根据发布消息中包括的主题名查找订阅树,获得与主题名匹配成功的主题过滤器对应的订阅客户端的标识。
标签管理模块44,用于提供与客户端对应的标签的管理服务,可以实时的更新与客户端的标识对应的标签。在具体的实现中,标签管理模块44,用于执行图2所示的订阅发布方法中的步骤204,图3所示的订阅发布方法中的步骤308,即用于在接收到第二订阅处理模块462发送的指示后,根据订阅客户端的标识和第一映射表获取与订阅客户端的标识对应的第一标签,并根据发布客户端的标识和第一映射表获取与发布客户端的标识对应的第二标签,并将第一标签和第二标签发送标签引擎模块45。
标签引擎模块45,用于执行图2所示的订阅发布方法中的步骤205,图3所示的订阅发布方法中的步骤309,即用于将第一标签和第二标签进行匹配,并向发布服务模块43返回匹配结果。
在本申请实施例中,进一步的,如图9所示,服务器还可以包括:订阅服务模块46、会话管理模块47、ACL模块48和持久化模块49,发布服务模块43还包括标签匹配模块432,订阅服务模块46还包括第一订阅处理模块461和第二订阅处理模块462。
标签匹配模块432,用于判断订阅客户端是否支持标签匹配,如果支持标签匹配,则指示标签管理模块44获取与订阅客户端的标识对应的第一标签,以及与发布客户端的标识对应的第二标签,如果不支持标签匹配,则指示发布服务模块43向订阅客户端发送发布消息。
订阅服务模块46是处理订阅消息的模块,用于执行图3所示的订阅发布方法中的步骤303,即用于在接收到ACL模块48发送的指示后,判断订阅消息中包括的至少一个主题过滤器中的每个主题过滤器是否支持标签匹配。对于任意一个主题过滤器,如果该主题过滤器支持标签匹配,则向第一订阅处理模块461发送一指示,第一订阅处理模块461,用于在接收到指示后,将该主题过滤器关联到订阅树中相应的子树上,并在存储有该主题过滤器的最后一个主题层级的子树中保存订阅客户端的信息,该订阅客户端的信息包括订阅客户端的标识和用于指示订阅客户端支持标签匹配的指示信息。如果该主题过滤器不支持标签匹配,则向第二订阅处理模块462发送一指示,第二订阅处理模块462,用于在接收到指示后,将该主题过滤器关联到订阅树中相应的子树上,并在存储有该主题过滤器的最后一个主题层级的子树中保存订阅客户端的信息,该订阅客户端的信息包括订阅客户端的标识和用于指示订阅客户端不支持标签匹配的指示信息。
会话管理模块47中保存有第二映射表,该第二映射表的每个表项包含客户端的标识,与客户端的标识对应的至少一个主题过滤器,以及至少一个主题过滤器中每个主题过滤器对应的标识信息,每个标识信息用于指示与标识信息对应的主题过滤器是否支持标签匹配,即会话管理模块47,用于执行图3所示的订阅发布方法中的根据订阅客户端的标识、第一主题过滤器以及第二映射表获取与第一主题过滤器对应的标识信息。会话管理模块47,还用于在客户端断开后重新连接到服务器后,在确定该客户端的会话在有效期内时,根据会话恢复订阅工作。
ACL模块48,用于客户端的接入认证和操作鉴权,客户端可以包括订阅客户端和发布客户端。在具体的实现中,ACL模块48,用于在接收到客户端发送的包含有用户名、密码以及客户端的标识的连接请求后,对用户名和密码进行认证,并在认证通过后向客户端反馈结果,且在会话管理模块47中生成并保存该客户端的会话,以及与该会话对应的客户端的标识。ACL模块48,还用于在接收到订阅客户端发送的订阅消息后,判断是否有订阅该订阅消息中包括的至少一个主题过滤器的权限,并在确定具有订阅的权限后,指示订阅服务模块46对订阅消息进行处理。ACL模块48,还用于在接收到发布客户端发送的发布消息后,判断发布客户端是否有发布消息到指定主题名的权限,并在确定具有发布的权限后,指示发布服务模块43对发布消息进行处理。
持久化服务模块49,用于会话、订阅消息和发布消息的持久化。
需要说明的是,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。
本申请实施例提供的服务器,用于执行上述订阅发布方法,因此可以达到与上述订阅发布方法相同的效果。
在采用集成的单元的情况下,该服务器可以包括处理模块、通信模块和存储模块。其中,处理模块可以是处理器或控制器。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框,模块和电路。处理器也可以是实现计算功能的组合,例如包含一个或多个微处理器组合,数字信号处理器(digital signal processor,DSP)和微处理器的组合等等。通信模块可以是收发器、收发电路或通信接口等。存储模块可以是存储器。
图10示出了上述实施例中所涉及的服务器的另一种可能的组成示意图。如图10所示,该服务器包括:处理器51,存储器52、通信接口53和通信总线54。
处理器51是服务器的控制中心,可以是一个处理器,也可以是多个处理元件的统称。例如,处理器51是一个中央处理器(central processing unit,CPU),也可以是特定集成电路(application-specific integrated circuit,ASIC),或者是被配置成实施本申请实施例的一个或多个集成电路,例如:一个或多个DSP,或,一个或者多个现场可编程门阵列(field-programmable gate array,FPGA)。
其中,处理器51可以通过运行或执行存储在存储器52内的软件程序,以及调用存储在存储器52内的数据,执行服务器的各种功能。例如,处理器51,用于执行图2中的步骤202中所述的根据发布消息获取发布客户端的标识、步骤203、步骤204,步骤205,图3中的步骤302所述的根据订阅消息获取订阅客户端的标识、步骤303、步骤305中所述的根据发布消息获取发布客户端的标识、步骤306、步骤307、步骤308、步骤309,和/或用于本文所描述的技术的其它过程。
在具体的实现中,作为一种实施例,处理器51可以包括一个或多个CPU,例如图10中所示的CPU0和CPU1。作为一种实施例,服务器可以包括多个处理器,例如图10中所示的处理器51和处理器55。这些处理器中的每一个可以是一个单核处理器(single-CPU),也可以是一个多核处理器(multi-CPU)。这里的处理器可以指一个或多个设备、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
存储器52可以是只读存储器(read-only memory,ROM)或可存储静态信息和指令的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(electricallyerasable programmable read-only memory,EEPROM)、只读光盘(compact disc read-only memory,CD-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。存储器52可以是独立存在,通过通信总线54与处理器51相连接。存储器52也可以和处理器51集成在一起。
其中,存储器52用于存储执行本申请方案的软件程序,并由处理器51来控制执行。
通信接口53,使用任何收发器一类的装置,用于与其他设备或通信网络通信,如订阅客户端、发布客户端、无线接入网(radio access network,RAN),无线局域网(wirelesslocal area networks,WLAN)等,在具体的实现中,服务器可以通过通信接口53接收订阅客户端发送的订阅客户端的标签的属性信息,以及发布客户端发送的发布客户端的标签的属性信息。通信接口53可以包括接收单元实现接收功能,以及发送单元实现发送功能。例如,通信接口53,用于执行图2中的步骤202所述的接收发布客户端发送的发布消息,步骤206,图3中的步骤302中所述的接收订阅客户端发送的订阅消息,步骤305中所述的接收发布客户端发送的发布消息,步骤310。
在本申请实施例的具体实现中,通信接口53是服务器上运行的服务端对外提供服务的接口。由于MQTT协议可以基于传输控制协议/互联网协议(transmission controlprotocol/internet protocol,TCP/IP)进行通信,因此默认该通信接口53与1833服务端口绑定。当然,MQTT协议也可以基于其他协议,如Socket协议进行通信,此时需要配置与其他服务端口连接的通信接口53,因此基于不同的通信协议,服务器可以根据需要配置不同的通信接口53。且,服务器可以配置用于管理标签的通信接口53,通过该通信接口53,可以动态调整客户端的标签。服务器还可以配置用于管理主题过滤器的通信接口53,通过该通信接口53,可以动态修改与主题过滤器对应的标识信息,以变更主题过滤器是否支持标签匹配的情况。需要说明的是,在本申请实施例中,用于管理标签的通信接口53和用于管理主题过滤器的通信接口53可以是同一个接口,也可以是不同的接口,本申请实施例在此对用于管理标签的通信接口和用于管理主题过滤器的接口是否是同一个接口并不做具体限制。
通信总线54,可以是工业标准体系结构(industry standard architecture,ISA)总线、外部设备互连(peripheral component interconnect,PCI)总线或扩展工业标准体系结构(extended industry standard architecture,EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是一个物理单元或多个物理单元,即可以位于一个地方,或者也可以分布到多个不同地方。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个可读取存储介质中。基于这样的理解,本申请实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一个设备(可以是单片机,芯片等)或处理器(processor)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何在本申请揭露的技术范围内的变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (15)

1.一种订阅发布方法,其特征在于,包括:
服务器接收发布客户端发送的发布消息,所述发布消息中包括主题名;
所述服务器根据所述发布消息获取所述发布客户端的标识;
所述服务器根据所述主题名获得订阅客户端的标识;
所述服务器根据所述订阅客户端的标识获取与所述订阅客户端的标识对应的第一标签;所述第一标签用于指示所述订阅客户端的至少一种属性信息;
所述服务器根据所述发布客户端的标识获取与所述发布客户端的标识对应的第二标签;所述第二标签用于指示所述发布客户端的至少一种属性信息;
所述服务器在确定所述第一标签和所述第二标签匹配的情况下,向所述订阅客户端发送所述发布消息。
2.根据权利要求1所述的方法,其特征在于,所述服务器根据所述主题名获得订阅客户端的标识包括:
所述服务器根据所述主题名查找订阅树,获得所述订阅客户端的标识,所述订阅树为至少一个主题过滤器组成的拓扑结构,所述订阅客户端的标识为与所述主题名匹配的一个主题过滤器对应的标识。
3.根据权利要求1或2所述的方法,其特征在于,
所述服务器根据所述订阅客户端的标识获取与所述订阅客户端的标识对应的第一标签包括:所述服务器根据所述订阅客户端的标识以及第一映射表获取所述第一标签,所述第一映射表的每个表项包括客户端的标识与对应的标签;
所述服务器根据所述发布客户端的标识获取与所述发布客户端的标识对应的第二标签包括:所述服务器根据所述发布客户端的标识以及所述第一映射表获取所述第二标签。
4.根据权利要求3所述的方法,其特征在于,所述服务器根据所述订阅客户端的标识以及第一映射表获取所述第一标签之前,所述方法还包括:
所述服务器确定所述订阅客户端支持标签匹配。
5.根据权利要求1-4中任意一项所述的方法,其特征在于,在所述服务器根据所述主题名获得所述订阅客户端的标识之前,所述方法还包括:
所述服务器接收所述订阅客户端发送的订阅消息,所述订阅消息中包括至少一个主题过滤器;
所述服务器根据所述订阅消息获取所述订阅客户端的标识。
6.根据权利要求5所述的方法,其特征在于,每个主题过滤器被分为多层,每层为一个主题层级,每个主题层级存储于所述订阅树的一个子树中,所述方法还包括:
所述服务器在确定所述至少一个主题过滤器中的第一主题过滤器支持标签匹配时,将所述第一主题过滤器关联到所述订阅树上,并在所述订阅树中存储有所述第一主题过滤器的最后一个主题层级的子树中保存所述订阅客户端的信息,所述订阅客户端的信息包括:所述订阅客户端的标识和用于指示所述订阅客户端支持标签匹配的指示信息,所述第一主题过滤器为所述至少一个主题过滤器中的任意一个。
7.根据权利要求6所述的方法,其特征在于,所述订阅消息中还包括:第一标志位,所述第一标志位包括第一值或者第二值,所述第一值用于指示所述至少一个主题过滤器中的每个主题过滤器支持标签匹配,所述第二值用于指示所述至少一个主题过滤器中包括至少一个不支持标签匹配的主题过滤器。
8.根据权利要求7所述的方法,其特征在于,所述确定所述至少一个主题过滤器中的第一主题过滤器支持标签匹配,包括:
所述服务器在确定所述第一标志位包括所述第一值时,确定所述第一主题过滤器支持标签匹配。
9.根据权利要求7所述的方法,其特征在于,所述订阅消息中还包括:所述至少一个主题过滤器中每个主题过滤器对应的第二标志位,每个第二标志位包括第三值或第四值,所述第三值用于指示与所述第二标志位对应的主题过滤器支持标签匹配,所述第四值用于指示与所述第二标志位对应的主题过滤器不支持标签匹配。
10.根据权利要求9所述的方法,其特征在于,所述确定所述至少一个主题过滤器中的第一主题过滤器支持标签匹配,包括:
所述服务器在确定所述第一标志位包括所述第二值,且确定与所述第一主题过滤器对应的第二标志位包括所述第三值时,确定所述第一主题过滤器支持标签匹配。
11.根据权利要求6所述的方法,其特征在于,所述方法还包括:
所述服务器根据所述订阅客户端的标识、所述第一主题过滤器以及第二映射表获取与所述第一主题过滤器对应的标识信息,所述第二映射表的每个表项包含客户端的标识,与客户端的标识对应的至少一个主题过滤器,以及至少一个主题过滤器中每个主题过滤器对应的标识信息,每个标识信息包括第五值或第六值,所述第五值用于指示与所述标识信息对应的主题过滤器支持标签匹配,所述第六值用于指示与所述标识信息对应的主题过滤器不支持标签匹配;
所述确定所述至少一个主题过滤器中的第一主题过滤器支持标签匹配,包括:
所述服务器在确定与所述第一主题过滤器对应的标识信息包括所述第五值时,确定所述第一主题过滤器支持标签匹配。
12.根据权利要求6-11中任一项所述的方法,其特征在于,所述确定所述订阅客户端支持标签匹配,包括:
所述服务器在确定存储有所述订阅客户端的标识的子树中还存储有用于指示所述订阅客户端支持标签匹配的指示信息时,确定所述订阅客户端支持标签匹配。
13.根据权利要求1-12中任一项所述的方法,其特征在于,
所述第一标签和所述第二标签匹配,包括:
所述第一标签包括的每种属性信息的属性值分别与所述第二标签包括的对应的属性信息的属性值符合预设的逻辑关系。
14.根据权利要求1-12中任意一项所述的方法,其特征在于,所述方法还包括:
所述服务器接收第二订阅客户端发送的第二订阅消息,所述第二订阅消息中包括至少一个主题过滤器;
所述服务器根据所述第二订阅消息获取所述第二订阅客户端的标识;
所述服务器获取预先存储的持久化消息,所述持久化消息为持久化的发布消息,所述持久化消息中包括一个主题名;
所述服务器根据所述持久化消息中包括的主题名获得与所述持久化消息中的主题名匹配成功的主题过滤器对应的所述第二订阅客户端的标识;
所述服务器根据所述持久化消息获取第二发布客户端的标识;
所述服务器根据所述第二发布客户端的标识获取与所述第二发布客户端的标识对应的第三标签;
所述服务器根据所述第二订阅客户端的标识获取与所述第二订阅客户端的标识对应的第四标签;
所述服务器在确定所述第三标签和所述第四标签匹配的情况下,向所述第二订阅客户端发送所述持久化消息。
15.一种服务器,其特征在于,包括存储器和处理器,
所述存储器用于存储计算机可执行指令;
所述处理器用于执行所述计算机可执行指令,以使所述服务器实现权利要求1-14中任意一项所述的方法。
CN202010708136.3A 2017-08-29 2017-08-29 一种订阅发布方法及服务器 Active CN112039942B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010708136.3A CN112039942B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201710757780.8A CN109428922B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器
CN202010708136.3A CN112039942B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201710757780.8A Division CN109428922B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器

Publications (2)

Publication Number Publication Date
CN112039942A true CN112039942A (zh) 2020-12-04
CN112039942B CN112039942B (zh) 2024-09-24

Family

ID=65503574

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202010708136.3A Active CN112039942B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器
CN201710757780.8A Active CN109428922B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201710757780.8A Active CN109428922B (zh) 2017-08-29 2017-08-29 一种订阅发布方法及服务器

Country Status (4)

Country Link
US (1) US20200195740A1 (zh)
EP (1) EP3668055B1 (zh)
CN (2) CN112039942B (zh)
WO (1) WO2019042110A1 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112783647A (zh) * 2021-01-13 2021-05-11 中国银联股份有限公司 服务器扩缩容方法、服务器、系统及存储介质
CN113190778A (zh) * 2021-04-30 2021-07-30 深圳壹账通创配科技有限公司 业务数据推送方法、系统、计算机设备及计算机存储介质
CN113783838A (zh) * 2021-08-05 2021-12-10 山东有人物联网股份有限公司 一种订阅方法、订阅控制装置及计算机可读存储介质
CN114172947A (zh) * 2021-12-09 2022-03-11 福建环宇通信息科技股份公司 一种物联网设备间的通讯方法及装置
CN114500495A (zh) * 2022-04-01 2022-05-13 荣耀终端有限公司 一种设备控制方法和设备控制系统
CN114866504A (zh) * 2022-03-25 2022-08-05 安徽南瑞中天电力电子有限公司 一种基于mqtt消息协议的能源控制器进程间的通信方法
CN115883669A (zh) * 2022-11-29 2023-03-31 重庆长安汽车股份有限公司 一种数据分发方法、系统、设备和介质
CN115914358A (zh) * 2021-08-06 2023-04-04 青岛海尔科技有限公司 消息推送方法、装置、电子设备及计算机存储介质

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109981161B (zh) * 2019-03-13 2021-06-08 南京邮电大学 一种基于发布订阅的多无人机通信模式的设计方法
CN110113381B (zh) * 2019-04-09 2023-04-07 深圳前海微众银行股份有限公司 一种区块链中订阅主题的方法及装置
CN112311825B (zh) * 2019-07-29 2023-05-19 浙江宇视科技有限公司 消息推送方法、装置、推送服务器及可读存储介质
CN110417499A (zh) * 2019-08-13 2019-11-05 沈阳风驰软件股份有限公司 基于mqtt协议的站台区域广播系统
CN110708247B (zh) * 2019-09-27 2022-03-22 浙江大搜车软件技术有限公司 消息路由方法、装置、计算机设备和存储介质
US20210152639A1 (en) * 2019-11-15 2021-05-20 Ford Global Technologies, Llc Vehicle network using publish-subscribe protocol
CN110932874B (zh) * 2019-11-22 2022-08-16 南京甄视智能科技有限公司 分布式消息广播通知实现方法
CN113094614A (zh) * 2019-12-23 2021-07-09 中国移动通信集团湖南有限公司 一种数据分发方法、系统及装置
CN111181976B (zh) * 2019-12-31 2022-06-24 深圳云天励飞技术股份有限公司 基于消息队列的行列权限管理的方法系统、电子设备及存储介质
CN111371889B (zh) * 2020-03-03 2023-03-31 广州致远电子股份有限公司 消息处理方法、装置、物联网系统和存储介质
CN111381986B (zh) * 2020-03-10 2024-04-16 北京奇艺世纪科技有限公司 消息传输方法、系统、装置、电子设备及可读存储介质
CN111597184A (zh) * 2020-04-01 2020-08-28 深圳英飞拓智能技术有限公司 一种基于树形结构数据的消息发布与订阅的方法和装置
CN113542314B (zh) * 2020-04-13 2022-07-08 烽火通信科技股份有限公司 一种基于关键字过滤的订阅模式实现方法及系统
CN111651476A (zh) * 2020-05-18 2020-09-11 青岛海洋科学与技术国家实验室发展中心 一种物联网关中mqtt主题的快速匹配方法及系统
CN111343289B (zh) * 2020-05-22 2020-09-25 苏宁智能终端有限公司 基于mqtt协议的消息推送方法及系统
CN111949302B (zh) * 2020-09-18 2022-05-31 苏州浪潮智能科技有限公司 一种用于工业计算机管理系统的即时性更新方法、系统和设备
CN112711636B (zh) * 2020-12-30 2023-09-05 腾讯科技(深圳)有限公司 数据同步方法、装置、设备及介质
CN112953940A (zh) * 2021-02-20 2021-06-11 同济大学 基于混合加密算法和关键属性过滤的安全发布订阅系统及方法
CN113239307A (zh) * 2021-05-17 2021-08-10 北京百度网讯科技有限公司 用于存储消息主题的方法及装置
CN113596140B (zh) * 2021-07-26 2023-09-22 深圳Tcl新技术有限公司 基于mqtt协议的信息发布方法及装置
CN114168414A (zh) * 2021-12-02 2022-03-11 吉林大学 一种基于mqtt协议的能耗管控系统及设备权限自主控制方法
CN114513509B (zh) * 2022-01-04 2023-05-16 烽火通信科技股份有限公司 一种基于MQTT的wi-sun网络数据采集方法与装置
CN114979265A (zh) * 2022-05-24 2022-08-30 树根互联股份有限公司 消息订阅方法、装置、计算机设备及计算机可读存储介质
CN115378989B (zh) * 2022-08-10 2023-08-15 深圳华芯信息技术股份有限公司 基于唤醒通道的mqtt主题订阅系统、方法、终端及介质
CN115065595B (zh) * 2022-08-17 2022-12-02 湖南云畅网络科技有限公司 一种自动化发布部署方法
CN115567584A (zh) * 2022-09-21 2023-01-03 北京百度网讯科技有限公司 订阅主题的处理方法、装置、电子设备及可读存储介质
CN115550439B (zh) * 2022-11-29 2023-04-11 杭州涂鸦信息技术有限公司 事件管理系统及方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060056628A1 (en) * 2002-12-12 2006-03-16 International Business Machines Corporation Methods, apparatus and computer programs for processing alerts and auditing in a publish/subscribe system
CN101251860A (zh) * 2008-03-10 2008-08-27 北京航空航天大学 一种Web信息发布管理系统与方法
CN102685155A (zh) * 2011-03-07 2012-09-19 联想(北京)有限公司 内容传送的方法、内容传送服务器及内容传送代理服务器
CN105183299A (zh) * 2015-09-30 2015-12-23 珠海许继芝电网自动化有限公司 一种人机界面服务处理系统和方法

Family Cites Families (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2428828A (en) * 2005-07-30 2007-02-07 Ibm Publish/subscribe messaging system
GB0524111D0 (en) * 2005-11-26 2006-01-04 Ibm Method, apparatus and computer program for access control
GB0623914D0 (en) * 2006-11-30 2007-01-10 Ibm Flexible topic identification in a publish/subscribe system
GB0905457D0 (en) * 2009-03-30 2009-05-13 Touchtype Ltd System and method for inputting text into electronic devices
CN103905471B (zh) * 2012-12-25 2019-01-01 腾讯科技(深圳)有限公司 社交网络的信息推送方法、服务器及社交网络
US9660943B2 (en) * 2014-04-25 2017-05-23 International Business Machines Corporation Messaging based signaling for communications sessions
CN105338014A (zh) * 2014-06-26 2016-02-17 青岛海尔智能家电科技有限公司 一种基于订阅机制的通信方法和主题服务器
WO2016168116A1 (en) * 2015-04-17 2016-10-20 Interdigital Patent Holdings, Inc. Method and apparatus for matching information supply and demand in icn based on imperfect matching
CN106130882B (zh) * 2016-07-13 2019-04-30 北京百度网讯科技有限公司 用于传输消息的方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060056628A1 (en) * 2002-12-12 2006-03-16 International Business Machines Corporation Methods, apparatus and computer programs for processing alerts and auditing in a publish/subscribe system
CN101251860A (zh) * 2008-03-10 2008-08-27 北京航空航天大学 一种Web信息发布管理系统与方法
CN102685155A (zh) * 2011-03-07 2012-09-19 联想(北京)有限公司 内容传送的方法、内容传送服务器及内容传送代理服务器
CN105183299A (zh) * 2015-09-30 2015-12-23 珠海许继芝电网自动化有限公司 一种人机界面服务处理系统和方法

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112783647A (zh) * 2021-01-13 2021-05-11 中国银联股份有限公司 服务器扩缩容方法、服务器、系统及存储介质
CN113190778A (zh) * 2021-04-30 2021-07-30 深圳壹账通创配科技有限公司 业务数据推送方法、系统、计算机设备及计算机存储介质
CN113783838A (zh) * 2021-08-05 2021-12-10 山东有人物联网股份有限公司 一种订阅方法、订阅控制装置及计算机可读存储介质
CN113783838B (zh) * 2021-08-05 2024-02-06 山东有人物联网股份有限公司 一种订阅方法、订阅控制装置及计算机可读存储介质
CN115914358A (zh) * 2021-08-06 2023-04-04 青岛海尔科技有限公司 消息推送方法、装置、电子设备及计算机存储介质
CN115914358B (zh) * 2021-08-06 2024-07-19 青岛海尔科技有限公司 消息推送方法、装置、电子设备及计算机存储介质
CN114172947B (zh) * 2021-12-09 2023-11-24 福建环宇通信息科技股份公司 一种物联网设备间的通讯方法及装置
CN114172947A (zh) * 2021-12-09 2022-03-11 福建环宇通信息科技股份公司 一种物联网设备间的通讯方法及装置
CN114866504A (zh) * 2022-03-25 2022-08-05 安徽南瑞中天电力电子有限公司 一种基于mqtt消息协议的能源控制器进程间的通信方法
CN114866504B (zh) * 2022-03-25 2024-02-23 安徽南瑞中天电力电子有限公司 一种基于mqtt消息协议的能源控制器进程间的通信方法
CN114500495B (zh) * 2022-04-01 2022-09-30 荣耀终端有限公司 一种设备控制方法和设备控制系统
CN114500495A (zh) * 2022-04-01 2022-05-13 荣耀终端有限公司 一种设备控制方法和设备控制系统
CN115883669A (zh) * 2022-11-29 2023-03-31 重庆长安汽车股份有限公司 一种数据分发方法、系统、设备和介质

Also Published As

Publication number Publication date
EP3668055A4 (en) 2020-07-01
CN109428922B (zh) 2020-09-08
EP3668055A1 (en) 2020-06-17
CN112039942B (zh) 2024-09-24
WO2019042110A1 (zh) 2019-03-07
US20200195740A1 (en) 2020-06-18
EP3668055B1 (en) 2022-04-06
CN109428922A (zh) 2019-03-05

Similar Documents

Publication Publication Date Title
CN109428922B (zh) 一种订阅发布方法及服务器
US20210099516A1 (en) Technologies for transparent function as a service arbitration for edge systems
US9207988B2 (en) Method, system, and device for managing server hardware resources in a cloud scheduling environment
CN110896355B (zh) 一种网络切片的选择方法及装置
CN103119907B (zh) 提供用于访问控制的智能组的系统和方法
CN108712332B (zh) 一种通信方法、系统和装置
US20140351413A1 (en) Selecting between domain name system servers of a plurality of networks
US9910687B2 (en) Data flow affinity for heterogenous virtual machines
CN104219127A (zh) 一种虚拟网络实例的创建方法以及设备
US20100306162A1 (en) Proximity data import
CN110413845B (zh) 基于物联网操作系统的资源存储方法及装置
CN104468401A (zh) 一种报文处理方法和装置
CN113361913A (zh) 一种通信业务编排方法、装置、计算机设备及存储介质
US20190149511A1 (en) System and method for connecting using aliases
US11595471B1 (en) Method and system for electing a master in a cloud based distributed system using a serverless framework
CN116032614A (zh) 容器网络微隔离方法、装置、设备和介质
US20120265801A1 (en) Out of order assembling of data packets
CA2986758C (en) Systems and methods for server failover and load balancing
CN115988078A (zh) 通信方法、系统、电子设备及存储介质
US20230153159A1 (en) Hardware Accelerator Service Aggregation
CN115604358B (zh) 业务处理方法、系统、装置、管理服务器及存储介质
CN117991973A (zh) 数据处理方法、装置以及电子设备
CN114780241A (zh) 一种应用于服务器的加速卡设置方法、装置及介质
CN116955790A (zh) 一种粗排处理的方法、装置、设备、存储介质及程序产品
CN117632531A (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
GR01 Patent grant
GR01 Patent grant