CN109756417A - 离线消息分发方法、服务器及存储介质 - Google Patents

离线消息分发方法、服务器及存储介质 Download PDF

Info

Publication number
CN109756417A
CN109756417A CN201910007206.XA CN201910007206A CN109756417A CN 109756417 A CN109756417 A CN 109756417A CN 201910007206 A CN201910007206 A CN 201910007206A CN 109756417 A CN109756417 A CN 109756417A
Authority
CN
China
Prior art keywords
message
offline
client
queue
time
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
CN201910007206.XA
Other languages
English (en)
Other versions
CN109756417B (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.)
Ping An Technology Shenzhen Co Ltd
Original Assignee
Ping An Technology Shenzhen Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Ping An Technology Shenzhen Co Ltd filed Critical Ping An Technology Shenzhen Co Ltd
Priority to CN201910007206.XA priority Critical patent/CN109756417B/zh
Publication of CN109756417A publication Critical patent/CN109756417A/zh
Priority to PCT/CN2019/117333 priority patent/WO2020140614A1/zh
Application granted granted Critical
Publication of CN109756417B publication Critical patent/CN109756417B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明揭露了一种基于MQTT协议的离线消息分发方法,该方法包括:接收第一客户端发布的消息,将该消息保存在消息队列中;接收第二客户端的连接指令,确定第二客户端的离线时间段;分别确定所述第二客户端对应的离线时间段内的消息,生成所述第二客户端的离线消息列表;及,将所述离线消息列表中的消息分发至所述第二客户端。本发明还揭露了一种服务器及计算机存储介质。利用本发明,降低了时间复杂度和空间复杂度,提高离线消息分发效率。

Description

离线消息分发方法、服务器及存储介质
技术领域
本发明涉及数据处理技术领域,尤其涉及一种基于MQTT协议的离线消息分发方法、服务器及计算机可读存储介质。
背景技术
早在1999年,IBM的Andy Stanford-Clark博士以及Arcom公司ArlenNipper博士发明了MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)技术。目前,国内很多企业都广泛使用MQTT作为Android手机客户端与服务器端推送消息的协议。其中,Sohu,Cmstop手机客户端中均有使用到MQTT作为消息推送消息。
MQTT协议中有一个功能是离线消息的处理。在市场上的很多MQTT产品对离线消息的处理都不一样,对于像ActiveMQ,moquette,apolo等开源MQTT服务端项目的离线消息都是针对一个客户端一个离线消息列表进行分发。不管从时间复杂度还是孔家复杂度考虑,客户端数量很大、离线消息数量很大时,不止会让服务器处理性能变差,还会浪费很多存储空间。
发明内容
鉴于以上内容,本发明提供一种基于MQTT协议的离线消息分发方法、服务器及计算机可读存储介质,其主要目的在于降低了时间复杂度和空间复杂度,提高离线消息分发效率。
为实现上述目的,本发明提供一种基于MQTT协议的离线消息分发方法,该方法包括:
S1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;
S2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;
S3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及
S4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
优选地,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:
从所述消息的属性信息中获取时间戳,根据所述时间戳从早到晚的顺序,依次将所述消息保存在该消息对应的消息队列的头部。
优选地,所述“分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,作为所述第二客户端的离线消息”,包括:
获取一个消息队列的第一条消息,从所述第一条消息的属性信息中获取时间戳,判断该时间戳是否在离线时间段内;
若是,则判断该第一条消息是离线消息,并依次获取该消息队列中的下一条消息重复执行判断步骤;
若否,则判断该第一条消息不是离线消息,判断该消息队列中不存在所述第二客户端的离线消息。
优选地,所述第二预设规则包括:
根据所述离线消息列表中各离线消息的排序,依次将离线消息发送至第二客户端。
优选地,所述第二预设规则还包括:
当所述第二客户端对应多个离线消息列表时,确定各离线消息列表对应的主题的订阅时间,按照订阅时间从早到晚的顺序,依次分发各离线消息列表中的离线消息。
优选地,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:
当所述消息队列中消息数量为第一预设阈值时,每接收一条新的消息时,移除所述消息队列尾部的一条消息,并将所述新的消息放置在消息队列的头部。
优选地,所述“根据第一预设规则将该消息保存在该消息队列中”,还包括:
当所述消息队列中消息数量达到第二预设阈值时,生成预警信息发送至预设终端,接收该预设终端发出的对所述第一预设阈值进行更新的指令,响应该指令并执行第一预设阈值更新操作。
此外,本发明还提供一种服务器,该服务器包括:存储器、处理器,所述存储器上存储有可在所述处理器上运行的离线消息分发程序,所述离线消息分发程序被所述处理器执行时,可实现如上所述离线消息分发方法中的任意步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中包括离线消息分发程序,所述离线消息分发程序被处理器执行时,可实现如上所述离线消息分发方法中的任意步骤。
本发明提出的离线消息分发方法、服务器及计算机可读存储介质,接收第一客户端发布的消息,根据消息对应的topic(主题)、按照第一预设规则保存至对应的消息队列中,待第二客户端重新连接服务器时,确定第二客户端的离线时间段及离线时间段内的离线消息,按照第二预设规则将离线消息分发给第二客户端。每个topic对应一个消息列表,当有多个第二客户端重新连接服务器时,均从同一消息列表拉取某一个topic对应的离线消息,同时降低了时间复杂度和空间复杂度,提高离线消息分发效率。
附图说明
图1为本发明服务器较佳实施例的示意图;
图2为图1中离线消息分发程序的程序模块示意图;
图3为本发明离线消息分发方法较佳实施例的流程图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明提供一种服务器。参照图1所示,为本发明服务器较佳实施例的示意图。
所述服务器1应用于一种基于MQTT协议的消息分发系统(图中未标出),该系统包括:包括多个所述服务器1的服务器集群、第一客户端(图中未标出)、第二客户端(图中未标出)。其中,所述第一客户端为消息发布端,用于发布消息至服务器1;所述第二客户端为消息订阅端,第二客户端只有在订阅了第一客户端对应的topic(主题,例如,天气)后才能接收到第一客户端发布的消息。所述第一客户端和第二客户端可以是智能手机、平板电脑、便携计算机、桌上型计算机等具有数据处理功能的终端设备。
在其他实施例中,所述消息分发系统还包括:负载均衡设备(图中未标出)。
所述负载均衡设备包括:第一负载均衡设备(图中未标出)及第二负载均衡设备(图中未标出)。需要说明的是,所述第一负载均衡设备及第二负载均衡设备可以是同一个负载均衡设备,也可以是不同的额负载均衡设备。
其中,第一负载均衡设备用于接收第一客户端发布的消息,并将该消息基于预设负载均衡规则均衡分配给服务器集群中的每台服务器1进行存储。
第二负载均衡设备用于接收第二客户端发出的连接指令,并将该连接指令基于预设负载均衡规则均衡分配给服务器集群中的每台服务器1进行处理。
鉴于第一客户端发布的消息都是存储到中央存储的,因此,每台服务器都能识别每台第二客户端对应的所有消息,并分发给对应的第二客户端。
所述预设负载均衡规则为:根据所述服务器集群中各服务器1的负载进行分配。例如,分配给实时负载最小的服务器进行处理。
在本实施例中,所述服务器1还可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器。
在图1中,所述服务器1包括存储器11、处理器12,及网络接口13。
其中,存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器11在一些实施例中可以是所述服务器1的内部存储单元,例如该服务器1的硬盘。存储器11在另一些实施例中也可以是所述服务器1的外部存储设备,例如该服务器1上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器11还可以既包括该服务器1的内部存储单元也包括外部存储设备。
存储器11不仅可以用于存储安装于该服务器1的应用软件及各类数据,例如离线消息分发程序10等,还可以用于暂时地存储已经输出或者将要输出的数据。
处理器12在一些实施例中可以是一中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器11中存储的程序代码或处理数据,例如,离线消息分发程序10等。
网络接口13可选的可以包括标准的有线接口、无线接口(如WI-FI接口),通常用于在该服务器1与其他电子设备之间建立通信连接。例如,与客户端(图中未标注)进行数据传输。
图1仅示出了具有组件11-13的服务器1,本领域技术人员可以理解的是,图1示出的结构并不构成对服务器1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
可选地,该服务器1还可以包括用户接口,用户接口可以包括显示器(Display)、输入单元比如键盘(Keyboard),可选的用户接口还可以包括标准的有线接口、无线接口。
可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及有机发光二极管(Organic Light-Emitting Diode,OLED)触摸器等。其中,显示器也可以称为显示屏或显示单元,用于显示在服务器1中处理的信息以及用于显示可视化的用户界面。
在图1所示的服务器1实施例中,作为一种计算机存储介质的存储器11中存储离线消息分发程序10的程序代码,处理器12执行离线消息分发程序10的程序代码时,实现步骤:A1-A4。
A1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中。
其中,第一客户端为消息发布端。
所述消息的属性信息中包括消息的时间戳、消息对应的topic(例如,天气)等信息。MQTT协议规定,消息发布端在发送消息至服务器时,需一并传递消息对应的tipic(主题),因此,服务器可直接获取消息对应的topic信息。
需要说明的是,每个topic对应一个消息队列。也就是说,消息队列的多少只与topic有关,与第二客户端(消息订阅端)的数量无关。
每条消息只属于一个topic,只有订阅了该topic的客户端才能收到该类消息。例如,topic为天气,第一客户端为发布天气消息的客户端,只有订阅了订阅了“天气”这个topic的第二客户端才能收到天气消息。当第一客户端发布一条天气消息后,服务器接收该条天气消息,根据其属性信息确定对应的topic“天气”,将这条消息保存至“天气”对应的消息队列中。
本实施例中,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:
从所述消息的属性信息中获取时间戳,根据所述时间戳从早到晚的顺序,依次将所述消息保存在该消息对应的消息队列的头部。
以topic为“天气”为例,消息的属性信息中还包括每一条消息的时间戳,时间戳为消息的发布时间,即,服务器接收到消息的时间。接收到消息之后,将消息按照时间的早晚顺序进行排序,然后找到“天气”这一通topic对应的消息队列,依次将消息存储至消息队列的头部,即,消息队列头部的消息为发布时间最晚(最新)的消息,消息队列尾部的消息为发布时间最早(最旧)的消息。
需要说明的是,每条消息的有效时间(例如,7天)是预先设定的,当消息保存至消息队列的时间超过预先设定的有效时间时,将所述消息从消息队列中删除。
A2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段。
第二客户端为消息订阅端,通过第二客户端订阅一个或多个topic,并接收一个或多个topic对应的消息。第二客户端执行每次离线或者上线操作时,服务器均能获取并记录每一个第二客户端的每次离线或者上线的时间。用户通过第二客户端执行上线操作为触发离线消息的分发的信号。
当侦测到第二客户端的连接指令时,获取当前第二客户端发出连接指令的时间作为离线时间段的结束时间,获取当前第二客户端发出连接指令前最近一次的离线时间,作为离线时间段的开始时间,根据开始时间及结束时间确定第二客户端本次的离线时间段。例如,本次上线时间为a,在本次上线前的离线时间为b,那么,第二客户端的离线时间段为b-a。
对于不同的第二客户端,离线时间段可能相同,也可能不同。
A3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表。
具体地,所述“分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,作为所述第二客户端的离线消息”,包括:
获取一个消息队列的第一条消息,从所述第一条消息的属性信息中获取时间戳,判断该时间戳是否在离线时间段内;
若是,则判断该第一条消息是离线消息,并依次获取该消息队列中的下一条消息重复上述步骤;
若否,则判断该第一条消息不是离线消息,判断该消息队列中不存在所述第二客户端的离线消息。
由于一个消息队列中消息是按照发布时间的早晚顺序排序的,若发布的最晚的消息的发布时间都不在离线时间段内,那么队列中其他消息也一定不在离线时间段内。若发布最晚的消息的是离线消息,则依次往前,判断第二条消息是否在离线时间段内。通过最先判断最新的消息是否为离线消息,可减少很多多余的判断,进而节约资源。
重复上述步骤,获取第二客户端在离线时间段内所有消息队列中的离线消息、并生成离线消息列表。离线消息列表中,最新的离线消息排在前面,最旧的离线消息排在后面。
本实施例中,第二客户端对应的消息队列的数量与第二客户端订阅的TOPIC数量相同。每个第二客户端订阅了N个TOPIC,即对应N个消息队列,其中,N为大于或等于0的整数。
例如,第二客户端P订阅了N个topic,依次从N个topic对应的消息队列中确定第二客户端P在离线时间段(b-a)内的消息,即,第二客户端P的离线消息。消息队列中可能存在第二客户端P的离线消息,也可能不存在第二客户端P的离线消息。
需要说明的是,同一个消息队列是所有订阅该topic的第二客户端共有的,由于不同第二客户端的上线/离线时间(即,离线时间段)不一致,因此,不同第二客户端对应的离线消息列表也可能存在区别。
A4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
其中,所述第二预设规则包括:
根据所述离线消息列表中各离线消息的排序,依次将离线消息发送至第二客户端。
例如,对于某一个离线消息列表L而言,在离线消息列表L中,各离线消息的排序为:m1、m2、m3、…、m10,其中,m1为最新的离线消息,m10为最旧的离线消息,在分发离线消息的过程中,先分发最新的离线消息m1,然后分发离线消息m2,以此类推。
优选地,本实施例中的所述第二预设规则还包括:
当所述第二客户端对应多个离线消息列表时,确定各离线消息列表对应的topic的订阅时间,按照订阅时间从早到晚的顺序,依次分发各离线消息列表中的离线消息。
当针对一个第二客户端分发离线消息时,若存在多个topic对应的离线消息需要分发,按照订阅时间的早晚顺序确定各topic的先后顺序,然后顺序获取各topic的离线消息进行分发。
上述实施例提出的服务器1,接收第一客户端发布的消息,根据消息对应的topic、按照第一预设规则保存至对应的消息队列中,待第二客户端重新连接服务器时,确定第二客户端的离线时间段及离线时间段内的离线消息,按照第二预设规则将离线消息分发给第二客户端。每个topic对应一个消息列表,当有多个第二客户端重新连接服务器时,均从同一消息列表拉取某一个topic对应的离线消息,同时降低了时间复杂度和空间复杂度,提高离线消息分发效率。
在其他实施例中,步骤A1中的所述“根据第一预设规则将该消息保存在该消息队列中”,包括:
当所述消息队列中消息数量为第一预设阈值时,每接收一条新的消息时,移除所述消息队列尾部的一条消息,并将所述新的消息放置在消息队列的头部。
例如,预先设置消息队列的最大容量为1000条,若消息队列中已经有1000条消息,每进来一条新消息,需将最旧的信息删除,然后保存这条新消息。
在其他实施例中,所述“根据第一预设规则将该消息保存在该消息队列中”,还包括:
当所述消息队列中消息数量达到第二预设阈值时,生成预警信息发送至预设终端,接收该预设终端发出的对所述第一预设阈值进行更新的指令,响应该指令并执行第一预设阈值更新操作。
例如,预先设置消息队列的容量的警戒值900,所述第二预设阈值与第一预设阈值是相对应的。当消息队列中消息数量达到900时,向预设终端发出预警信息(例如,“消息队列中的消息数量即将到达上限,请及时作出调整”)。管理人员通过预设终端发出对第一预设阈值进行调整的指令,指令中包括第一预设阈值的更新值,例如,1200。通过该步骤保证了消息的完整性。
可选地,在其他的实施例中,离线消息分发程序10还可以被分割为一个或者多个模块,一个或者多个模块被存储于存储器11中,并由一个或多个处理器(本实施例为处理器12)所执行,以完成本发明,本发明所称的模块是指能够完成特定功能的一系列计算机程序指令段。
例如,参照图2所示,为图1中离线消息分发程序10的模块示意图,该实施例中,离线消息分发程序10可以被分割为第一接收110、第二接收模块120、查询模块130及分发模块140,所述模块110-140所实现的功能或操作步骤均与上文类似,此处不再详述,示例性地,例如其中:
第一接收模块110,用于接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;
第二接收模块120,用于接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;
查询模块130,用于分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及
分发模块140,用于基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
本发明提供一种基于MQTT协议的离线消息分发方法。参照图3所示,为本发明基于MQTT协议的离线消息分发方法较佳实施例的流程图。该方法可以由一个服务器执行,该服务器可以由软件和/或硬件实现。
在本实施例中,所述基于MQTT协议的离线消息分发方法应用于服务器,该方法包括步骤S1-S4。
S1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中。
其中,第一客户端为消息发布端。
所述消息的属性信息中包括消息的时间戳、消息对应的topic(例如,天气)等信息。MQTT协议规定,消息发布端在发送消息至服务器时,需一并传递消息对应的tipic(主题),因此,服务器可直接获取消息对应的topic信息。
需要说明的是,每个topic对应一个消息队列。也就是说,消息队列的多少只与topic有关,与第二客户端(消息订阅端)的数量无关。
每条消息只属于一个topic,只有订阅了该topic的客户端才能收到该类消息。例如,topic为天气,第一客户端为发布天气消息的客户端,只有订阅了订阅了“天气”这个topic的第二客户端才能收到天气消息。当第一客户端发布一条天气消息后,服务器接收该条天气消息,根据其属性信息确定对应的topic“天气”,将这条消息保存至“天气”对应的消息队列中。
本实施例中,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:
从所述消息的属性信息中获取时间戳,根据所述时间戳从早到晚的顺序,依次将所述消息保存在该消息对应的消息队列的头部。
以topic为“天气”为例,消息的属性信息中还包括每一条消息的时间戳,时间戳为消息的发布时间,即,服务器接收到消息的时间。接收到消息之后,将消息按照时间的早晚顺序进行排序,然后找到“天气”这一通topic对应的消息队列,依次将消息存储至消息队列的头部,即,消息队列头部的消息为发布时间最晚(最新)的消息,消息队列尾部的消息为发布时间最早(最旧)的消息。
需要说明的是,每条消息的有效时间(例如,7天)是预先设定的,当消息保存至消息队列的时间超过预先设定的有效时间时,将所述消息从消息队列中删除。
S2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段。
第二客户端为消息订阅端,通过第二客户端订阅一个或多个topic,并接收一个或多个topic对应的消息。第二客户端执行每次离线或者上线操作时,服务器均能获取并记录每一个第二客户端的每次离线或者上线的时间。用户通过第二客户端执行上线操作为触发离线消息的分发的信号。
当侦测到第二客户端的连接指令时,获取当前第二客户端发出连接指令的时间作为离线时间段的结束时间,获取当前第二客户端发出连接指令前最近一次的离线时间,作为离线时间段的开始时间,根据开始时间及结束时间确定第二客户端本次的离线时间段。例如,本次上线时间为a,在本次上线前的离线时间为b,那么,第二客户端的离线时间段为b-a。
对于不同的第二客户端,离线时间段可能相同,也可能不同。
S3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表。
具体地,所述“分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,作为所述第二客户端的离线消息”,包括:
获取一个消息队列的第一条消息,从所述第一条消息的属性信息中获取时间戳,判断该时间戳是否在离线时间段内;
若是,则判断该第一条消息是离线消息,并依次获取该消息队列中的下一条消息重复上述步骤;
若否,则判断该第一条消息不是离线消息,判断该消息队列中不存在所述第二客户端的离线消息。
由于一个消息队列中消息是按照发布时间的早晚顺序排序的,若发布的最晚的消息的发布时间都不在离线时间段内,那么队列中其他消息也一定不在离线时间段内。若发布最晚的消息的是离线消息,则依次往前,判断第二条消息是否在离线时间段内。通过最先判断最新的消息是否为离线消息,可减少很多多余的判断,进而节约资源。
重复上述步骤,获取第二客户端在离线时间段内所有消息队列中的离线消息、并生成离线消息列表。离线消息列表中,最新的离线消息排在前面,最旧的离线消息排在后面。
本实施例中,第二客户端对应的消息队列的数量与第二客户端订阅的TOPIC数量相同。每个第二客户端订阅了N个TOPIC,即对应N个消息队列,其中,N为大于或等于0的整数。
例如,第二客户端P订阅了N个topic,依次从N个topic对应的消息队列中确定第二客户端P在离线时间段(b-a)内的消息,即,第二客户端P的离线消息。消息队列中可能存在第二客户端P的离线消息,也可能不存在第二客户端P的离线消息。
需要说明的是,同一个消息队列是所有订阅该topic的第二客户端共有的,由于不同第二客户端的上线/离线时间(即,离线时间段)不一致,因此,不同第二客户端对应的离线消息列表也可能存在区别。
S4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
其中,所述第二预设规则包括:
根据所述离线消息列表中各离线消息的排序,依次将离线消息发送至第二客户端。
例如,对于某一个离线消息列表L而言,在离线消息列表L中,各离线消息的排序为:m1、m2、m3、…、m10,其中,m1为最新的离线消息,m10为最旧的离线消息,在分发离线消息的过程中,先分发最新的离线消息m1,然后分发离线消息m2,以此类推。
优选地,本实施例中的所述第二预设规则还包括:
当所述第二客户端对应多个离线消息列表时,确定各离线消息列表对应的topic的订阅时间,按照订阅时间从早到晚的顺序,依次分发各离线消息列表中的离线消息。
当针对一个第二客户端分发离线消息时,若存在多个topic对应的离线消息需要分发,按照订阅时间的早晚顺序确定各topic的先后顺序,然后顺序获取各topic的离线消息进行分发。
上述实施例提出的基于MQTT协议的离线消息分发方法,接收第一客户端发布的消息,根据消息对应的topic、按照第一预设规则保存至对应的消息队列中,待第二客户端重新连接服务器时,确定第二客户端的离线时间段及离线时间段内的离线消息,按照第二预设规则将离线消息分发给第二客户端。每个topic对应一个消息列表,当有多个第二客户端重新连接服务器时,均从同一消息列表拉取某一个topic对应的离线消息,同时降低了时间复杂度和空间复杂度,提高离线消息分发效率。
在其他实施例中,步骤S1中的所述“根据第一预设规则将该消息保存在该消息队列中”,包括:
当所述消息队列中消息数量为第一预设阈值时,每接收一条新的消息时,移除所述消息队列尾部的一条消息,并将所述新的消息放置在消息队列的头部。
例如,预先设置消息队列的最大容量为1000条,若消息队列中已经有1000条消息,每进来一条新消息,需将最旧的信息删除,然后保存这条新消息。
在其他实施例中,步骤S1中的所述“根据第一预设规则将该消息保存在该消息队列中”,还包括:
当所述消息队列中消息数量达到第二预设阈值时,生成预警信息发送至预设终端,接收该预设终端发出的对所述第一预设阈值进行更新的指令,响应该指令并执行第一预设阈值更新操作。
例如,预先设置消息队列的容量的警戒值900,所述第二预设阈值与第一预设阈值是相对应的。当消息队列中消息数量达到900时,向预设终端发出预警信息(例如,“消息队列中的消息数量即将到达上限,请及时作出调整”)。管理人员通过预设终端发出对第一预设阈值进行调整的指令,指令中包括第一预设阈值的更新值,例如,1200。通过该步骤保证了消息的完整性。
上述实施例提出的基于MQTT协议的离线消息分发方法,通过对每个消息队列中消息的容量进行管控,节省存储空间的同时,保证离线消息的完整性。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质中包括离线消息分发程序10,所述离线消息分发程序10被处理器执行时实现如下操作:
A1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;
A2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;
A3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及
A4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
本发明之计算机可读存储介质的具体实施方式与上述离线消息分发方法的具体实施方式大致相同,在此不再赘述。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (10)

1.一种基于MQTT协议的离线消息分发方法,应用于服务器,其特征在于,所述方法包括:
S1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;
S2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;
S3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及
S4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
2.根据权利要求1所述的离线消息分发方法,其特征在于,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:从所述消息的属性信息中获取时间戳,根据所述时间戳从早到晚的顺序,依次将所述消息保存在该消息对应的消息队列的头部。
3.根据权利要求1所述的离线消息分发方法,其特征在于,所述“分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,作为所述第二客户端的离线消息”,包括:
获取一个消息队列的第一条消息,从所述第一条消息的属性信息中获取时间戳,判断该时间戳是否在离线时间段内;
若是,则判断该第一条消息是离线消息,并依次获取该消息队列中的下一条消息重复执行判断步骤;
若否,则判断该第一条消息不是离线消息,判断该消息队列中不存在所述第二客户端的离线消息。
4.根据权利要求3所述的离线消息分发方法,其特征在于,所述第二预设规则包括:根据所述离线消息列表中各离线消息的排序,依次将离线消息发送至第二客户端。
5.根据权利要求4所述的离线消息分发方法,其特征在于,所述第二预设规则还包括:当所述第二客户端对应多个离线消息列表时,确定各离线消息列表对应的主题的订阅时间,按照订阅时间从早到晚的顺序,依次分发各离线消息列表中的离线消息。
6.根据权利要求3所述的离线消息分发方法,其特征在于,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:当所述消息队列中消息数量为第一预设阈值时,每接收一条新的消息时,移除所述消息队列尾部的一条消息,并将所述新的消息放置在消息队列的头部。
7.根据权利要求6所述的离线消息分发方法,其特征在于,所述“根据第一预设规则将该消息保存在该消息队列中”,还包括:
当所述消息队列中消息数量达到第二预设阈值时,生成预警信息发送至预设终端,并接收该预设终端发出的对所述第一预设阈值进行更新的指令,响应该指令并执行第一预设阈值更新操作。
8.一种服务器,其特征在于,该服务器包括:存储器、处理器,所述存储器上存储有可在所述处理器上运行的离线消息分发程序,所述离线消息分发程序被所述处理器执行时,可实现如下步骤:
A1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;
A2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;
A3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及
A4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。
9.根据权利要求8所述的服务器,其特征在于,所述离线消息分发程序被所述处理器执行时,还实现如权利要求2至7中任意一项所述的离线消息分发方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中包括离线消息分发程序,所述离线消息分发程序被处理器执行时,可实现如权利要求1至7中任意一项所述的离线消息分发方法的步骤。
CN201910007206.XA 2019-01-04 2019-01-04 离线消息分发方法、服务器及存储介质 Active CN109756417B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201910007206.XA CN109756417B (zh) 2019-01-04 2019-01-04 离线消息分发方法、服务器及存储介质
PCT/CN2019/117333 WO2020140614A1 (zh) 2019-01-04 2019-11-12 离线消息分发方法、服务器及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910007206.XA CN109756417B (zh) 2019-01-04 2019-01-04 离线消息分发方法、服务器及存储介质

Publications (2)

Publication Number Publication Date
CN109756417A true CN109756417A (zh) 2019-05-14
CN109756417B CN109756417B (zh) 2022-08-30

Family

ID=66405363

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910007206.XA Active CN109756417B (zh) 2019-01-04 2019-01-04 离线消息分发方法、服务器及存储介质

Country Status (2)

Country Link
CN (1) CN109756417B (zh)
WO (1) WO2020140614A1 (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110391974A (zh) * 2019-08-01 2019-10-29 北京云中融信网络科技有限公司 一种消息同步方法、服务端、终端及系统
CN111212135A (zh) * 2019-12-31 2020-05-29 北京金山云网络技术有限公司 消息订阅方法、装置、系统、电子设备及存储介质
WO2020140614A1 (zh) * 2019-01-04 2020-07-09 平安科技(深圳)有限公司 离线消息分发方法、服务器及存储介质
CN111654428A (zh) * 2020-06-05 2020-09-11 天津卓朗科技发展有限公司 离线消息处理方法、装置和服务器
CN112422369A (zh) * 2020-11-19 2021-02-26 青岛海尔科技有限公司 离线时间的确定方法及装置、存储介质、电子装置
CN112751892A (zh) * 2019-10-30 2021-05-04 腾讯科技(深圳)有限公司 一种信息分发方法、装置、设备及存储介质
CN112764947A (zh) * 2021-01-15 2021-05-07 百果园技术(新加坡)有限公司 消息数据拉取方法、装置、设备和存储介质
CN115297076A (zh) * 2022-08-01 2022-11-04 招商局金融科技有限公司 离线消息拉取方法、装置、计算机设备及存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114338805B (zh) * 2021-12-29 2023-05-16 金卡智能集团股份有限公司 数据处理方法和服务器
CN114760259B (zh) * 2022-04-27 2024-01-16 深圳小湃科技有限公司 离线消息发送方法、装置、电子设备及可读存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140172991A1 (en) * 2012-12-14 2014-06-19 International Business Machines Corporation Low latency messaging chat server
CN106385410A (zh) * 2016-09-08 2017-02-08 四川长虹电器股份有限公司 基于mqtt的智能家电设备控制系统
CN106656751A (zh) * 2016-12-05 2017-05-10 北京中交兴路信息科技有限公司 一种数据通信的方法及装置
US20170237785A1 (en) * 2016-02-16 2017-08-17 LinkTime Corp. System and method for managing online group chat
CN108390933A (zh) * 2018-02-26 2018-08-10 广州华多网络科技有限公司 消息分发方法、装置、服务器及存储介质
CN108768826A (zh) * 2018-05-16 2018-11-06 华南理工大学 基于MQTT和Kafka高并发场景下的消息路由方法
CN108965265A (zh) * 2018-06-26 2018-12-07 四川斐讯信息技术有限公司 一种基于mqtt协议的聊天方法及系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105306413B (zh) * 2014-06-13 2018-08-17 北京视联动力国际信息技术有限公司 一种信息发布方法和系统,视联网服务器和发布终端
GB201412996D0 (en) * 2014-07-22 2014-09-03 Simple Matters Ltd Chat system
CN108023923A (zh) * 2016-11-04 2018-05-11 中兴通讯股份有限公司 离线消息的处理方法及装置
CN108494815A (zh) * 2018-02-06 2018-09-04 北京极智感科技有限公司 一种传输消息的方法和系统
CN108416006B (zh) * 2018-02-28 2019-10-08 百度在线网络技术(北京)有限公司 离线信息推荐方法、装置、客户端、服务器及存储介质
CN109756417B (zh) * 2019-01-04 2022-08-30 平安科技(深圳)有限公司 离线消息分发方法、服务器及存储介质

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140172991A1 (en) * 2012-12-14 2014-06-19 International Business Machines Corporation Low latency messaging chat server
US20170237785A1 (en) * 2016-02-16 2017-08-17 LinkTime Corp. System and method for managing online group chat
CN106385410A (zh) * 2016-09-08 2017-02-08 四川长虹电器股份有限公司 基于mqtt的智能家电设备控制系统
CN106656751A (zh) * 2016-12-05 2017-05-10 北京中交兴路信息科技有限公司 一种数据通信的方法及装置
CN108390933A (zh) * 2018-02-26 2018-08-10 广州华多网络科技有限公司 消息分发方法、装置、服务器及存储介质
CN108768826A (zh) * 2018-05-16 2018-11-06 华南理工大学 基于MQTT和Kafka高并发场景下的消息路由方法
CN108965265A (zh) * 2018-06-26 2018-12-07 四川斐讯信息技术有限公司 一种基于mqtt协议的聊天方法及系统

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020140614A1 (zh) * 2019-01-04 2020-07-09 平安科技(深圳)有限公司 离线消息分发方法、服务器及存储介质
CN110391974A (zh) * 2019-08-01 2019-10-29 北京云中融信网络科技有限公司 一种消息同步方法、服务端、终端及系统
CN112751892A (zh) * 2019-10-30 2021-05-04 腾讯科技(深圳)有限公司 一种信息分发方法、装置、设备及存储介质
CN112751892B (zh) * 2019-10-30 2022-06-17 腾讯科技(深圳)有限公司 一种信息分发方法、装置、设备及存储介质
CN111212135A (zh) * 2019-12-31 2020-05-29 北京金山云网络技术有限公司 消息订阅方法、装置、系统、电子设备及存储介质
CN111654428B (zh) * 2020-06-05 2022-05-17 天津卓朗科技发展有限公司 离线消息处理方法、装置和服务器
CN111654428A (zh) * 2020-06-05 2020-09-11 天津卓朗科技发展有限公司 离线消息处理方法、装置和服务器
CN112422369B (zh) * 2020-11-19 2022-08-02 青岛海尔科技有限公司 离线时间的确定方法及装置、存储介质、电子装置
CN112422369A (zh) * 2020-11-19 2021-02-26 青岛海尔科技有限公司 离线时间的确定方法及装置、存储介质、电子装置
CN112764947A (zh) * 2021-01-15 2021-05-07 百果园技术(新加坡)有限公司 消息数据拉取方法、装置、设备和存储介质
CN112764947B (zh) * 2021-01-15 2023-12-26 百果园技术(新加坡)有限公司 消息数据拉取方法、装置、设备和存储介质
CN115297076A (zh) * 2022-08-01 2022-11-04 招商局金融科技有限公司 离线消息拉取方法、装置、计算机设备及存储介质
CN115297076B (zh) * 2022-08-01 2024-03-19 招商局金融科技有限公司 离线消息拉取方法、装置、计算机设备及存储介质

Also Published As

Publication number Publication date
WO2020140614A1 (zh) 2020-07-09
CN109756417B (zh) 2022-08-30

Similar Documents

Publication Publication Date Title
CN109756417A (zh) 离线消息分发方法、服务器及存储介质
CN108696374B (zh) 更新客户端配置的方法和装置
WO2020211344A1 (zh) 一种基于mqtt的消息分发方法、服务器、装置及存储介质
US9871756B1 (en) Methods for displaying notifications
CN107111632B (zh) 用于调节移动通信设备处的通信的方法和系统
CN111770157B (zh) 一种业务处理方法、装置及电子设备和存储介质
CN108306717B (zh) 数据传输方法、服务器及存储介质
JP2007183904A (ja) イベント処理システム、イベント処理方法、イベント処理装置、及び、イベント処理プログラム
US20170310740A1 (en) Method, Apparatus, and System for Distributing Information in Graphic Code
CN108932157B (zh) 分布式处理任务的方法、系统、电子设备和可读介质
CN112839067B (zh) 一种数据同步方法及装置
WO2020133995A1 (zh) 副本部署方法、云服务器及存储介质
CN110377376A (zh) 界面消息刷新方法、装置、计算机装置及可读存储介质
US20160352649A1 (en) Methods for an automatic scaling of data consumers and apparatuses using the same
CN113285886A (zh) 一种带宽分配的方法、装置、电子设备及可读存储介质
CN113254274A (zh) 消息处理方法、装置、存储介质以及服务器
CN109857579A (zh) 一种数据处理方法及相关装置
CN113783913A (zh) 一种消息推送管理方法和装置
CN115966276B (zh) 数据展示的方法、装置、电子设备及介质
CN106933449B (zh) 图标处理方法和装置
CN110413546B (zh) 基于redis的数据存储方法、装置及计算机可读存储介质
CN114968707A (zh) 工作项状态的控制方法、装置、存储介质及计算机设备
CN112671816B (zh) 一种文件下载方法、装置、设备及介质
CN113094165A (zh) 一种提升云端加载应用程序速度的方法
CN115037802B (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