MQTT服务端和客户端测试结果
1.服务端启动:
2.订阅客户端启动:
订阅客户端发送请求步骤:
2.1首先向服务端发送连接请求
2.2服务端回复连接成功ack
2.3客户端收到连接成功ack,客户端发送心跳【PingReqMessage】
2.4服务回送心跳应答【PingRespMessage】
2.5客户端收到心跳应答后,订阅话题【mqttClient/topicTwo2、mqttClient/topicTwo3、mqttClient/topicTwo4】,三者Qos=1,目前没法设置成其他
2.6服务端回复订阅成功ack【SubAckMessage】
看订阅客户端启动日志:
看服务端日志:服务端对这三个订阅请求都回复了ack
3.发布客户端启动:
发布客户端发送请求步骤:
3.1首先向服务端发送连接请求
3.2服务端回复连接成功ack
3.3客户端收到连接成功ack,客户端发送心跳【PingReqMessage】
3.4服务回送心跳应答【PingRespMessage】
3.5客户端收到心跳应答后,发布话题如下;
发布客户端的日志:
数了一下,话题发布全部成功,这里mqttClient/topicTwo4话题发布了5次【为了验证多次发送同一个话题能否成功】
验证订阅客户端是否收到5个mqttClient/topicTwo4话题
上图结果显示正确,测试到这里就结束了。
4.服务端保持客户端的心跳:【55秒】
5.服务端保持客户端心跳机制:
5.1客户端与服务端连接成功后,服务端会建立一个该客户端延时任务,放入延时队列,延时时间为该客户的存活时间【ConnectMessage的KeepAlive参数】,放入延时队列每5秒取任务,如果有任务被获取,并且该任务没有被取消,服务端主动断开客户端连接。
5.2 服务端一旦接收到已经建立连接的客户端的数据,会把该客户端之前的心跳任务取消,重新提交一个延时任务。
本例子中客户端30s会发送一个Ping消息给服务端,所以客户端永远不会断开【除非异常】
以上是简单的例子,仅用于自己学习记录,其中还有很多问题和不完善的地方,不喜勿碰,非常感谢。
献上需要外部导入的jar包:
链接:https://pan.baidu.com/s/1GNaoruCvnG_egP69TEXCOA
提取码:mxfm