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

技术编号:21120908 阅读:22 留言:0更新日期:2019-05-16 10:39
本发明专利技术揭露了一种基于MQTT协议的离线消息分发方法,该方法包括:接收第一客户端发布的消息,将该消息保存在消息队列中;接收第二客户端的连接指令,确定第二客户端的离线时间段;分别确定所述第二客户端对应的离线时间段内的消息,生成所述第二客户端的离线消息列表;及,将所述离线消息列表中的消息分发至所述第二客户端。本发明专利技术还揭露了一种服务器及计算机存储介质。利用本发明专利技术,降低了时间复杂度和空间复杂度,提高离线消息分发效率。

【技术实现步骤摘要】
离线消息分发方法、服务器及存储介质
本专利技术涉及数据处理
,尤其涉及一种基于MQTT协议的离线消息分发方法、服务器及计算机可读存储介质。
技术介绍
早在1999年,IBM的AndyStanford-Clark博士以及Arcom公司ArlenNipper博士专利技术了MQTT(MessageQueuingTelemetryTransport,消息队列遥测传输)技术。目前,国内很多企业都广泛使用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上配备的插接式硬盘,智能存储卡(SmartMediaCard,SMC),安全数字(SecureDigital,SD)卡,闪存卡(FlashCard)等。进一步地,存储器11还可以既包括该服务器1的内部存储单元也包括外部存储设备。存储器11不仅可以用本文档来自技高网...

【技术保护点】
1.一种基于MQTT协议的离线消息分发方法,应用于服务器,其特征在于,所述方法包括:S1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;S2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;S3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及S4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。

【技术特征摘要】
1.一种基于MQTT协议的离线消息分发方法,应用于服务器,其特征在于,所述方法包括:S1、接收第一客户端发布的消息,根据该消息的属性信息确定该消息对应的消息队列,并基于第一预设规则将该消息保存在该消息队列中;S2、接收第二客户端的连接指令,获取所述第二客户端的上线时间及上一次离线时间,确定离线时间段;S3、分别确定所述第二客户端对应的一个或多个消息队列,分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,生成所述第二客户端的离线消息列表;及S4、基于第二预设规则将所述离线消息列表中的消息分发至所述第二客户端。2.根据权利要求1所述的离线消息分发方法,其特征在于,所述“根据第一预设规则将该消息保存在该消息队列中”,包括:从所述消息的属性信息中获取时间戳,根据所述时间戳从早到晚的顺序,依次将所述消息保存在该消息对应的消息队列的头部。3.根据权利要求1所述的离线消息分发方法,其特征在于,所述“分别从所述一个或多个消息队列中找出所述第二客户端在离线时间段内的消息,作为所述第二客户端的离线消息”,包括:获取一个消息队列的第一条消息,从所述第一条消息的属性信息中获取时间戳,判断该时间戳是否在离线时间段内;若是,则判断该第一条消息是离线消息,并依次获取该消息队列中的下一条消息重复执行判断步骤;若否,则判断该第一条消息不是离线消息,判断该消息队列中不存在所述第二客户端的离线消息。4.根据权利要求3所述的离线消息分发方法,其特征在于,所述第二预设规则包括:根据所述离线消息列表中各离线消息的排序,依次将离线消息发送至第二客户端。5.根据权利要求4所述的离线消息分发方法,其特征在于,所述第二预设规则还包括:当所述第二客户端对应多个离线消息列表时,确定各离线消息列表对应的主题的订阅时间,按照订阅时间从早到...

【专利技术属性】
技术研发人员:詹泽
申请(专利权)人:平安科技深圳有限公司
类型:发明
国别省市:广东,44

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1