一种基于MQTT的云推送方法和系统
技术领域
本发明涉及一种基于MQTT的云推送领域,特别是涉及一种面向互联网、物联网智能终端的MQTT云推送方法和系统。
背景技术
随着万物互联产业时代的来临,针对各种联网设备的消息推送需求将爆发性增长。与传统互联网相比,物联网设备由于其在处理器性能,网络带宽和稳定性等诸多方面的限制,使得其对推送系统提出了更高的要求。
目前针对互联网的消息推送系统主要基于两类通信协议实现,一类是XMPP(Extensible Messaging and Presence Protocol)协议,另一类则采用自定义的私有通信协议。XMPP协议使用XML进行数据的组织和传输,导致其数据负载过大,流量消耗比较大,传输效率不高,不适用于网络环境相对较差的情况。而私有通信协议由于缺乏统一和开放性,难以满足消息推送领域的标准化需求。
MQTT(Message Queuing Telemetry Transport)是由IBM开发的物联网传输协议。它采用了一种轻量级的订阅/发布模式来进行消息传输。MQTT针对低带宽,低计算能力,以及不稳定的网络环境做了特殊的优化,可以适用于针对嵌入式智能终端和移动终端的消息推送,能够有效节省终端的耗电量和流量。
发明内容
本发明的目的是在MQTT的基础上实现一种云推送方法和系统,能使互联网、物联网应用开发者方便快速地集成消息推送服务。
本发明中的云推送系统,包括:
开发者注册模块,用于接收处理应用开发者的注册,推送权限的申请,以及注册信息的管理。
发布模块,用于接收来自应用服务器的消息推送请求,获取待推送消息。
消息验证模块,用于验证所述待推送消息的合法性。如果验证通过,则将消息送入到消息存储模块。
消息存储模块,用于存储所述待推送消息,包括所述待推送消息的消息内容、推送主题、注册Rid、是否保留消息、推送等级。
身份验证模块,在智能终端尝试与云推送系统建立连接的时候,需要先通过所述身份验证模块对所述智能终端进行身份验证,身份验证通过后才能够建立可靠连接。
设备注册模块,在所述智能终端与所述云推送系统建立可靠连接后,所述智能终端向所述设备注册模块发起设备注册请求,所述设备注册模块返回全局唯一注册Rid给所述智能终端,所述智能终端将所述注册Rid告知所述应用服务器。
订阅模块,所述智能终端在与所述云推送系统建立所述可靠连接后,向所述订阅模块发起订阅主题请求,通过订阅设定的主题实现所述待推送消息推送的订阅/发布模型。
推送模块,所述消息存储模块进行所述待推送消息的本地存储之后,将所述待推送消息提交到所述推送模块,所述推送模块通过所述订阅模块获取所有订阅了所述待推送消息所指定的所述主题的所述智能终端。然后,将所述待推送消息推送到所述智能终端,所述智能终端在接收到所述待推送消息之后,对所述待推送消息进行本地处理,并且返回确认消息给所述推送模块。
推送统计模块,通过获取所述推送模块反馈的推送结果,对所述待推送消息的推送情况进行统计。
利用上述云推送系统进行云推送的方法包括如下步骤:
S1、云推送系统中的开发者注册模块接收来自开发者的注册和云推送权限申请,并返回对应的Appid和AppSecret权限信息,以及对应平台的开发SDK。
S2、所述开发者在应用服务器配置对应的权限信息,并且根据步骤S1中所提供的开发SDK,在其开发的所述智能终端当中集成消息推送服务。
S3、所述智能终端启动后,初始化本地推送环境,与所述云推送系统建立可靠连接。所述云推送系统中的身份验证模块验证所述智能终端的合法性,验证通过后建立可靠连接,进入步骤S4。
S4、所述智能终端通过步骤S3中所述可靠连接,向所述云推送系统中的设备注册模块进行设备注册,设备注册模块注册成功后,返回注册Rid。
S5、所述智能终端向所述云推送系统中订阅模块发起订阅请求,订阅某一设定的主题。
S6、所述应用服务器将待推送消息发送到所述云推送系统中的发布模块。
S7、所述发布模块调用所述云推送系统中的消息验证模块,验证待推送消息的合法性,如果通过,则进入步骤S8。
S8、所述云推送系统中的消息存储模块对验证通过后的所述待推送消息进行本地存储,而后将所述待推送消息提交到所述云推送系统中的推送模块。
S9、所述推送模块调用所述订阅模块,获取订阅了所述待推送消息所指定的主题的智能终端订阅列表。将所述待推送消息通过步骤S3中建立的所述可靠连接,推送到存在于所述智能终端订阅列表中的所述智能终端。
S10、所述智能终端成功接收到所述待推送消息,处理所述待推送消息,并且返回确认消息给所述推送模块。
S11、所述推送模块接收到所述智能终端返回过来的确认消息,将所述确认消息转发给所述云推送系统中的推送统计模块。
S12、所述推送统计模块记录消息发送成功,并且统计消息发送情况。
在步骤S1中,所述开发SDK在底层实现了MQTT协议的封装,并为智能终端提供建立云推送连接、维持心跳以及订阅主题的接口;所述Appid和AppSecret分别是注册过程中由所述云推送系统中的所述开发者注册模块所提供的全局唯一接口身份证号以及对应的密码。所述Appid和AppSecret用于所述智能终端和应用服务器与所述云推送系统之间的身份认证。
在步骤S3中,智能终端启动后,通过所述开发SDK所提供的接口,在智能终端系统中创建并启动一个推送监听服务,所述推送监听服务的主要职责是与所述云推送系统建立并维持可靠连接。
在步骤S3中,所述身份验证是指验证智能终端通过SDK接口发送过来的Appid和AppSecret是否与步骤S1中所申请的匹配。所述Appid和AppSecret在步骤S1获取,用于进行身份验证,并且由所述开发者在所述开发SDK以及所述应用服务器中配置。
在步骤S4中,所述设备注册模块返回针对该智能终端的全局唯一的注册Rid。所述注册Rid可以唯一标记当前建立可靠连接的智能终端。
在步骤S5中,所述云推送系统采用epoll模型维持所有的来自所述智能终端的可靠连接。
在步骤S5中,所述智能终端可以向所述订阅模块发起多次订阅请求,订阅不同的主题。
在步骤S6中,所述待推送消息包括消息内容,消息发送等级,AppSecret,是否保留推送消息,以及消息主题或消息发送到的注册Rid。
在步骤S6中,对所述待推送消息除了可以发送到某一设定主题,实现订阅/发布模式的云消息推送,还可以将所述待推送消息发送到某一设定的注册Rid,实现一对一的消息推送。
在步骤S7中,所述消息验证是指通过云推送系统中的消息验证模块对待推送消息中的AppSecret进行合法性验证。
在步骤S9中,所述订阅模块,通过使用二叉树的数据结构来维护智能终端于其订阅主题的关系,特别的,该二叉树采用孩子-兄弟表示法来表示智能终端与订阅主题之间的关系。
进一步说,所述开发SDK并不只有单独的一种,而是针对不同的操作系统和处理器平台都提供对应的开发SDK。
进一步说,在步骤S4中,所述应用客户端与所述云推送系统建立可靠连接之后,通过心跳机制来维持可靠连接。所述心跳机制是指所述智能终端与所述云推送系统之间按照指定时间间隔来发送心跳请求数据包和心跳响应数据包。
进一步说,在步骤S9中,针对所述是否保留推送消息,如果所述待推送消息设置为保留推送消息,则对当前没有建立连接,但是已经订阅了所述待推送消息所指定的主题的智能终端,当其再次建立连接后,所述云推送系统会第一时间将所述待推送消息送达到所述智能终端。
进一步说,在步骤S5中,所述订阅主题,是由应用服务器与智能终端协商确定的。所述应用服务器针对预设的所述订阅主题进行待推送消息的发布,同时,所述智能终端针对预设的所述订阅主题进行待推送消息的订阅和接收。
进一步说,所述请求数据包和所述响应数据包的所述指定时间间隔不是固定的,而是可以根据在具体实施过程中的网络环境以及系统的吞吐量进行调整。所述调整的最终结果取决于系统对推送消息的实时性要求和网络的实际带宽环境。
本发明基于MQTT实现一种云推送方法和系统,使互联网、物联网应用开发者能方便快速集成消息推送服务。
附图说明
图1是本发明中基于MQTT的云推送方法的流程图。
图2是本发明中基于MQTT的云推送系统的结构模块图。
具体实施方式
本发明实施例提供一种基于MQTT的云推送方法及系统,能使互联网、物联网应用开发者方便快速地集成推送服务。
为了对本发明的技术特征、目的和效果有更加清楚的理解,先对照附图详细说明本发明的具体实施方式,下述具体实施方式以及附图,应当理解,此处所描述的具体实施例仅仅用于解释本发明,并不用于限定本发明。
本发明实例提供的基于MQTT的云推送方法,如图1所示,本发明的具体实施步骤如下:
S1、开发者向云推送系统申请注册和云推送权限。
S2、所述开发者注册模块返回对应的Appid、AppSecret和开发SDK。
S3、所述开发者在应用服务器配置对应的权限信息。所述开发者并且通过所述开发SDK对所述智能终端集成云推送服务,使其能够订阅主题和接收已订阅主题的推送消息。
S4、所述智能终端在安装启动后,通过MQTT协议向所述云推送系统发起建立连接请求。
S5、所述云推送系统,通过身份验证模块对所述智能终端进行身份验证,验证通过后在所述云推送系统和所述智能终端之间建立可靠连接。
S6、所述智能终端通过所述可靠连接,向所述设备注册模块发起注册请求。
S7、所述设备注册模块返回全局唯一注册Rid给所述智能终端。
S8、所述智能终端将所述注册Rid告知所述应用服务器。
S9、所述智能终端通过所述可靠连接,向所述云推送系统中的所述订阅模块发起订阅请求,订阅某一设定主题。
S10、所述订阅模块在验证所述智能终端权限通过后,将所述智能终端添加到所述订阅主题的订阅列表当中,并且返回订阅成功。
S11、所述开发者在所述设备终端服务器设置相应的消息推送条件。
S12、所述应用服务器将所述待推送消息提交到所述云推送系统中的所述发布模块当中。
S13、所述云推送系统通过所述消息验证模块对所述待推送消息的合法性进行验证。
S14、所述消息验证模块对所述待推送消息的合法性进行验证通过后,将所述待推送消息通过所述消息存储模块进行存储。所述消息存储模块对消息存储完后,将所述待推送消息提交到所述推送模块,所述推送模块负责所述待推送消息的最终推送。
S15、所述推送模块提取所述待推送消息的推送主题,通过所述订阅模块获取所有订阅了所述主题的所有智能终端列表。并且将消息推送到所述智能终端列表中的所述智能终端。
S16、所述智能终端在接收到所述待推送消息后,对所述待推送消息进行处理,并且返回推送成功消息给所述推送模块。
S17、所述推送模块在接收到所述推送成功消息之后,返回对应的推送成功消息给所述应用服务器。
S18、所述推送模块在发送完所述推送成功消息给所述应用服务器后,删除步骤S14中所存储的所述待推送消息。
S19、开发者查看所述推送统计模块所统计的消息推送结果信息。
本发明实施例还提供一种基于MQTT的云推送系统装置实施,应用于基于MQTT的云推送系统,如图2所示:
开发者注册模块,用于接收处理应用开发者的注册,推送权限的申请,以及注册信息的管理。
发布模块,用于接收来自所述智能设备服务器的消息推送请求,获取所述待推送消息。
消息验证模块,用于验证所述待发送消息的合法性。如果验证通过,则将消息送入到消息存储模块。
消息存储模块,用于存储所述待推送消息,包括所述待推送消息的消息内容,推送主题,注册Rid,推送等级。
身份验证模块,在所述智能终端尝试与所述云推送系统建立连接的时候,需要先通过所述身份验证模块对所述智能终端进行身份验证,身份验证通过后才能够建立可靠连接。
设备注册模块,在所述智能终端与所述云推送系统建立可靠连接后,所述智能终端要向所述设备注册模块发起设备注册请求,所述设备注册模块返回全局唯一注册Rid给所述智能终端,所述智能终端将所述注册Rid告知所述应用服务器。
订阅模块,所述智能终端在与所述云推送系统建立所述可靠连接后,向所述订阅模块发起订阅主题请求,通过订阅特定的主题实现所述待推送消息推送的订阅/发布模型。
推送模块,所述消息存储模块进行消息的本地存储之后,将消息提交到所述推送模块,所述推送模块通过所述订阅模块获取所有订阅了所述待推送消息所指定的所述主题的智能终端。然后,将所述待推送消息推送到所述智能终端。
所述智能终端在接收到所述待推送消息之后,对消息进行本地处理,同时返回消息推送成功。
推送统计模块,通过获取所述推送模块反馈的推送结果,对所述待推送消息的推送情况进行统计。