一种基于MQTT-WebSocket的消息收发方法

文档序号:25992147发布日期:2021-07-23 21:04阅读:596来源:国知局
一种基于MQTT-WebSocket的消息收发方法

本发明涉及网络通信技术领域,尤其涉及一种基于mqtt-websocket(messagequeuingtelemetrytransportoverwebsocket)的消息收发方法。



背景技术:

从共享单车等产品进入公众视野后,物联网平台的热度大大增加,而业务需求对服务器与移动设备或轻量级设备实时通信的要求也越来越频繁,比如用户可以通过使用手机扫描打印机的二维码上传pdf文件进行打印,这就要求打印机与手机之间需要建立双向通信。目前较为常用的技术一般是利用mqtt协议+https或websocket长连接实现,这两种方式受网络环境和设备性能影响较大,当消息较多或客户端连接数较大时,容易出现传输缓慢或消息丢失的现象,不能满足现有业务的需要。



技术实现要素:

本发明的目的旨在提供一种基于mqtt-websocket的消息收发方法,该方法既能保证消息传输稳定不丢失,又能拥有较高的传输效率,使得数据包能够实时传输并降低消息服务器的压力。

实现本发明目的的具体技术方案是:

一种基于mqtt-websocket的消息收发方法,方法包括如下步骤:

(1)对服务端进行配置,启动mqtt代理消息队列服务器,开放websocket端口;其中,所述配置:以账密的形式设置token认证凭证;升级http协议以支持websocket协议;

(2)对客户端进行配置,创建连接实例,为实例注册监听事件,并提供认证凭证,随后发起连接请求;其中,所述配置:给定唯一的客户端id供消息服务器辨识;在上线时接收未确认过的离线消息;所述注册监听事件有:上线事件、下线事件、订阅主题事件、发布消息事件及接收消息事件;

(3)客户端成功连接消息服务器后,通过websocket协议保持长连接,客户端作为发布者向消息服务器通过mqtt协议发布带有主题的消息,使得消息服务器收到该消息后,根据其所携带的主题插入至相同主题的消息队列末尾,完成消息的发布;

(4)客户端作为订阅者订阅指定主题,使得消息服务器将消息队列中待发送的消息依次发送至订阅者,完成消息的接收。

步骤(3)中所述带有主题的消息以字节流或json字符串的形式发送,并且设定低或高的服务质量:设定低服务质量时,消息只会发送最多一次;设定高服务质量时,消息被接收处理后消息服务器会自动向客户端发送“完成”的通知,确保消息被发送至少一次。

所述步骤(4)中订阅指定主题时设定接收低或高服务质量的消息;在接收消息事件中处理消息时,需要按照其发送时的数据格式进行解码;设定低服务质量时,消息只会接收最多一次;设定高服务质量时,消息被接收处理后客户端会自动向消息服务器发送“完成”的通知,确保消息被接收至少一次。

本发明的有益效果:

(1)消息服务器作为一个消息收发管理中心,提供了稳定快速的传输保障。减少了客户端对消息管理的压力,高服务质量的消息也避免了客户端意外掉线造成消息丢失的情况。

(2)将mqtt协议的消息通过websocket端口传输,有益地结合了两者各自的优势,既提升了连接的稳定性和性能,也提升了消息的传输效率。

附图说明

图1为实施本发明的系统结构示意图;

图2为本发明的流程示意图。

具体实施方式

下面结合说明书附图和实施例对本发明作进一步的详细描述。

实施例

如图1所示为实施本发明的系统结构示意图,本实施例根据当前企业的基础设施配置了1个服务器和2个移动设备,服务器作为消息服务器使用,而移动设备则作为客户端使用。

如图2所示为本发明的流程示意图,本发明提供了一种基于mqtt-websocket的消息收发方法,包括如下步骤:

(1)对服务端(mqtt消息代理服务器)进行相关配置:将认证凭证token设置为{“username”:“admin”,“password”:“admin”};升级http协议以支持websocket协议。启动mqtt代理消息队列服务器,开放9008端口作为websocket端口。

(2)对客户端(设备1、设备2)进行相关配置:设备1作为消息发布者,给定客户端id“producter”,而设备2作为消息订阅者,给定客户端id“consumer”;两台设备在上线时设定自动接收未确认过的离线消息。然后创建连接实例,为实例注册一系列监听事件:上线事件、下线事件、订阅主题事件、发布消息事件、接收消息事件。之后提供认证凭证{“username”:“admin”,“password”:“admin”},最后向服务端的9008端口发起连接请求。

(3)两个客户端成功连接消息服务器后,通过websocket协议保持长连接。发布者向消息服务器通过mqtt协议发布带有主题的消息,并设定高服务质量。消息服务器收到该消息后,解析内容获得客户端id、消息主题、消息内容、服务质量等,根据其所携带的主题将消息插入至相应消息队列末尾,高服务质量使得服务端向发布者回发一条特殊的“确认”报文。若一定时间后,发布者未收到该报文,则认为发布的消息已丢失,发布者会重新进行发送;若报文成功到达发布者客户端,则发布者确认后就不再重发。至此完成消息的发布。

(4)订阅者以高服务质量订阅指定主题,使得消息服务器启动对相应消息队列的监听。服务端将消息队列中待发送的消息依次发送至订阅者,订阅者会在接收消息时向服务端回发一条特殊的“确认”报文,若一定时间后,服务端未收到该报文,则认为待接收的消息已丢失,服务端会重新进行发送;若报文成功到达服务端,则服务端确认后就不再重发。至此完成消息的接收。



技术特征:

1.一种基于mqtt-websocket的消息收发方法,其特征在于,该方法包括如下步骤:

(1)对服务端进行配置,启动mqtt代理消息队列服务器,开放websocket端口;其中,所述配置:以账密的形式设置token认证凭证;升级http协议以支持websocket协议;

(2)对客户端进行配置,创建连接实例,为实例注册监听事件,并提供认证凭证,随后发起连接请求;其中,所述配置:给定唯一的客户端id供消息服务器辨识;在上线时接收未确认过的离线消息;所述注册监听事件有:上线事件、下线事件、订阅主题事件、发布消息事件及接收消息事件;

(3)客户端成功连接消息服务器后,通过websocket协议保持长连接,客户端作为发布者向消息服务器通过mqtt协议发布带有主题的消息,使得消息服务器收到该消息后,根据其所携带的主题插入至相同主题的消息队列末尾,完成消息的发布;

(4)客户端作为订阅者订阅指定主题,使得消息服务器将消息队列中待发送的消息依次发送至订阅者,完成消息的接收。

2.根据权利要求1所述的基于mqtt-websocket的消息收发方法,其特征在于,步骤(3)中所述带有主题的消息以字节流或json字符串的形式发送,并且设定低或高的服务质量:设定低服务质量时,消息只会发送最多一次;设定高服务质量时,消息被接收处理后消息服务器会自动向客户端发送“完成”的通知,确保消息被发送至少一次。

3.根据权利要求1所述的基于mqtt-websocket的消息收发方法,其特征在于,所述步骤(4)中订阅指定主题时设定接收低或高服务质量的消息;在接收消息事件中处理消息时,需要按照其发送时的数据格式进行解码;设定低服务质量时,消息只会接收最多一次;设定高服务质量时,消息被接收处理后客户端会自动向消息服务器发送“完成”的通知,确保消息被接收至少一次。


技术总结
本发明公开了一种基于MQTT‑WebSocket的消息收发方法,包括如下步骤:1)对服务端进行相关配置,启动MQTT代理消息队列服务器,开放WebSocket端口;2)对客户端进行相关配置,创建连接实例,为实例注册一系列监听事件,并提供认证凭证,随后发起连接请求;3)客户端成功连接消息服务器后,通过WebSocket协议保持长连接;客户端可以作为发布者向消息服务器通过MQTT协议发布带有主题的消息,使得消息服务器收到该消息后,根据其所携带的主题插入至相应消息队列末尾,完成消息的发布;4)客户端也可以作为订阅者订阅指定主题,使得消息服务器将消息队列中待发送的消息依次发送至订阅者,完成消息的接收。本发明能够提升连接的稳定性和性能,并提升消息的传输效率。

技术研发人员:蒲鹏;陈烨
受保护的技术使用者:华东师范大学
技术研发日:2021.03.29
技术公布日:2021.07.23
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1