本发明涉及通信技术领域,尤其涉及到一种基于MQTT和MYSQL的消息推送方法和系统。
背景技术:
随着互联网及云计算的发展和普及,越来越多的企业把服务部署在云端。而随着企业服务的扩展,单点服务器远不能满足需求,首选便是分布式,即维护一个中心节点和大量的服务节点。节点和中心节点间的通信成为新的问题,也即如何高的实现中心节点与节点间可靠通信。
现有的通信方式中,客户端的每个业务都需要和服务端单独维护连接,维护很复杂。而且客户端和服务端间的通信消息无法保证可靠送达,无法保证通信的可靠性。例如,客户端与服务端间的通信消息未持久化,在发生进程重启设备重启后,消息丢失,无法重传,使得无法保证关键消息的准确送达。
因此,现有技术有待进一步的改进。
技术实现要素:
本发明所要解决的问题在于,提供一种基于MQTT和MYSQL的消息推送方法和系统,以简化客户端和服务端连接映射和保证消息的可靠推送。
本发明采用如下技术方案:
一种基于MQTT和MYSQL的消息推送方法,包括步骤:
服务端基于MQTT协议建立与客户端的通信连接;
所述服务端根据业务指令从MYSQL数据库中调取推送数据,并将所述推送数据发送给建立通信连接的所述客户端;
所述服务端监测所述客户端的回应确认消息,若未监测到所述客户端的回应确认消息,则重新发送所述推送数据。
所述的基于MQTT和MYSQL的消息推送方法,其中,所述客户端包括有数个,且每一个具有唯一标识码,所述服务端通过识别唯一标识码识别将所述推送数据发送至对应的客户端。
所述的基于MQTT和MYSQL的消息推送方法,其中,若未监测到所述客户端的回应确认消息,所述服务端按时间间隔发送所述推送数据,且所述时间间隔随着推送次数越来越大。
所述的基于MQTT和MYSQL的消息推送方法,其中,所述服务端监测所述客户端的回应确认消息,若未监测到所述客户端的回应确认消息,则重新发送所述推送数据之后具体还包括:
所述客户端根据业务指令向所述服务端发送数据请求,并在未收到所述服务端的回应确认消息时重复发送数据请求。
所述的基于MQTT和MYSQL的消息推送方法,其中,所述客户端收到所述服务端的回应确认消息时或数据请求次数达到预定次数时停止发送数据请求。
所述的基于MQTT和MYSQL的消息推送方法,其中,所述客户端通过一条TCP长连接与所述服务器相连。
一种基于MQTT和MYSQL的消息推送系统,所述系统包括服务端和客户端,所述服务端包括MQTT服务器、服务器业务进程和服务器MYSQL数据库,所述客户端包括MQTT客户端、客户端业务进程和客户端MYSQL数据库,所述服务器MYSQL数据库和所述客户端MYSQL数据库分别用于存储数据,所述服务器业务进程和所述客户端业务进程分别用于业务指令和数据处理;所述服务端和所述客户端基于MQTT协议建立通信连接;
所述MQTT服务器用于根据业务指令从MYSQL数据库中调取推送数据,并将所述推送数据发送给所述MQTT客户端;以及监测所述MQTT客户端的回应确认消息,在未监测到所述MQTT客户端的回应确认消息时重新发送所述推送数据;
所述MQTT客户端用于接收所述推送数据,以及根据业务指令主动向所述MQTT服务器发送数据请求,并在未收到所述MQTT服务器的回应确认消息时重复发送数据请求。
所述的基于MQTT和MYSQL的消息推送系统,其中,所述客户端包括有数个,且每一个具有唯一标识码,所述服务端通过唯一标识码识别对应的客户端。
所述的基于MQTT和MYSQL的消息推送系统,其中,所述MQTT服务器还用于在未监测到所述MQTT客户端的回应确认消息,按时间间隔发送所述推送数据,且所述时间间隔随着推送次数越来越大;
或者所述MQTT客户端还用于根据业务指令主动向所述MQTT服务器发送数据请求,并在未收到所述MQTT服务器的回应确认消息时重复发送数据请求,直至数据请求成功或数据请求次数达到预定次数。
所述的基于MQTT和MYSQL的消息推送系统,其中,所述MQTT客户端通过一条TCP长连接与所述MQTT服务器相连。
与现有技术相比,本发明提供的基于MQTT和MYSQL的消息推送方法和系统。采用MQTT来维护服务端和客户端之间的连接映射,实现多个客户端通过一条TCP长连接与服务端相连,使得客户端和服务端连接映射更加简化。同时,通过服务器的重复确认机制和客户端的重复拉取机制,保证了消息的可靠推送。
附图说明
图1为本发明提供的基于MQTT和MYSQL的消息推送方法的流程图。
图2为本发明提供的基于MQTT和MYSQL的消息推送方法中一优选实施例的流程图。
图3为本发明提供的基于MQTT和MYSQL的消息推送方法中又一优选实施例的流程图。
图4为本发明提供的基于MQTT和MYSQL的消息推送系统的结构框图。
图5为本发明提供的基于MQTT和MYSQL的消息推送系统一优选实施例的结构框图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
MQTT(英文全拼:Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,可以应用在物联网上。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
MySQL 是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL 所使用的 SQL 语言是用于访问数据库的最常用标准化语言。
参见图1,图1是本发明实施例提供的基于MQTT和MYSQL的消息推送方法的流程图,包括:
步骤S11、服务端基于MQTT协议建立与客户端的通信连接; 其中,每一个客户端都有一个唯一的识别码(ID),服务端通过客户端的ID来区分不同的客户端;多个客户端通过一条TCP长连接与服务端相连。
本发明实施例利用MQTT发布/订阅模式的特性,服务端和客户端之间可以通过一条连接传输多种消息,完全消除了“新消息需要发起新连接”的弊端,极大的简化维护客户端和服务端连接的复杂性。
步骤S12、所述服务端根据业务指令从MYSQL数据库中调取推送数据,并将所述推送数据发送给建立通信连接的所述客户端;在服务端有数据需要推送给客户端时,服务端需推送内容的业务指令,从MYSQL数据库将相应的推送数据调出,然后发送给客户端,然后执行步骤S13。
步骤S13、所述服务端监测所述客户端的回应确认消息,若未监测到所述客户端的回应确认消息,则重新发送所述推送数据。
本发明实施例的服务端采用 “确认机制”以保证消息的可靠推送,即向客户端推送数据后,需要客户端的回应确认消息,如果服务端监测不到到所述客户端的回应确认消息,服务端会按时间间隔不断重复发送推送数据,且推送的时间间隔会随着推送次数越来越大,直至推动成功即收到客户端的回应确认消息或者达到预定推动次数。
此外,客户端采用“重复拉取机制”以保证消息的可靠拉取,在实施时,客户端会根据拉取数据所对应的业务指令主动向服务端发送数据请求,并不断监测服务端的回应确认消息,如果收不到服务端的回应确认消息则不断重复发送数据请求,直到客户端收到所述服务端的回应确认消息时或数据请求次数达到预定次数时停止发送数据请求。
因此,本发明实施例通过服务端采用 “确认机制”和客户端采用“重复拉取机制”保证了消息的可靠推送。
基于本发明实施例提供的基于MQTT和MYSQL的消息推送方法,本发明实施例还提供了一种基于MQTT和MYSQL的消息推送系统,参见图5,该系统包括服务,1和客户端2,所述服务端1包括MQTT服务器11、服务器业务进程12和服务器MYSQL数据库13,客户端2包括MQTT客户端21、客户端业务进程22和客户端MYSQL数据库23,服务器MYSQL数据库13和客户端MYSQL数据库23分别用于存储数据,服务器业务进程12和客户端业务进程22分别用于业务指令和数据处理;服务端1和客户端2通过一条TCP长连接建立之间的通信连接。
在具体实施时, MQTT服务器11根据业务指令从MYSQL数据库13中调取推送数据,并将推送数据发送给MQTT客户端21;以及监测MQTT客户端21的回应确认消息,在未监测到MQTT客户端21的回应确认消息时重新发送推送数据,MQTT服务器11在未监测到所述MQTT客户端21的回应确认消息,按时间间隔发送所述推送数据,且所述时间间隔随着推送次数越来越大; MQTT客户端21用于接收所述推送数据,以及根据业务指令主动向MQTT服务器11发送数据请求,并在未收到MQTT服务器11的回应确认消息时重复发送数据请求,在未收到所述MQTT服务器11的回应确认消息时重复发送数据请求,直至数据请求成功或数据请求次数达到预定次数。如图4所示,客户端2包括有数个,且每一个具有唯一标识码,服务端1通过唯一标识码识别对应的客户端,服务端1和客户端2的消息推送过程具体可参见图2和图3的示例。
本发明实施例提供的基于MQTT和MYSQL的消息推送系统可以应用在多个场景中,比如计费上网系统,计费上网系统包含两个部分:充值计费系统;上网设备系统;消息推送系统。充值计费系统部署在云端,相当于本发明实施例中所述的服务端;上网设备系统部署在各个网点(每个网点有一个上网设备系统),相当于本发明实施例中所述的客户端;消息推送系统,需要及时可靠的把用户的充值信息推送到上网设备系统,以决定用户是否可以通过上网设备系统上网。
综上所述,本发明提供的基于MQTT和MYSQL的消息推送方法和系统。采用MQTT来维护服务端和客户端之间的连接映射,实现多个客户端通过一条TCP长连接与服务端相连,使得客户端和服务端连接映射更加简化。同时,通过服务器的重复确认机制和客户端的重复拉取机制,保证了消息的可靠推送。
应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。