1、单播消息推送
方案:为一个客户端建立一个单独的唯一标识,从服务端进行推送;
用例:① 在订阅端(使用mosquitto_sub 命令行也可以使用mqtt.fx模拟器)上,开两个client,并以各自的客户端序列号做为定阅的主题;
Xshell 终端1: mosquitto_sub -h localhost -t "test/1111"
Xshell 终端2: mosquitto_sub -h localhost -t "test/1112"
② 在发布端(使用mosquitto_sub 命令行也可以使用mqtt.fx模拟器),发布其中一个客户端序列号,内容为“Hello序列号 MQTT2”,只有相应客户端能收到,别的客户端收不到;
Xshell终端3:mosquitto_pub -h localhost -t "test/1111" -m "Hello1111 MQTT2"
结果:只有Xshell 终端1:收到发布的消息
2、分组消息推送
方案:为设备组生成一个唯一标识,在两个客户端订阅此标识;(但如果实际应用中组是经常变化,且数据不多时,建议不要生成标识符,直接遍历设备列表一个一个发送即可)
用例:① 定义一个组,并为这个组生成一个唯一标识“groupid”;
② 在客户端上,开三个client,其中两个定阅主题“groupid”,一个不定阅;
Xshell 终端1: mosquitto_sub -h localhost -t "test/groupid/1111"
Xshell 终端2: mosquitto_sub -h localhost -t "test/groupid/1111"
Xshell 终端3: mosquitto_sub -h localhost -t "test/groupid/1112"
③ 在服务端发布主题“groupid”,内容为“ group message ”,两个已订阅的客户端都可以收到此信息,没订阅的收不到些信息;
Xshell 终端4: mosquitto_pub -h localhost -t "test/groupid/1111" -m "MQTT group message"
结果:
两个已订阅的客户端都可以收到此信息,没订阅的收不到些信息;
3、广播消息推送
方案: 为所有客户端订阅一个“all/#”的主题,但需要发送所有消息时,以此为发布主题即可;
用例: ① 在客户端上,开两个client,全部定阅“all/#”的主题;
Xshell 终端1: mosquitto_sub -h localhost -t "all/#"
Xshell 终端2: mosquitto_sub -h localhost -t "all/#"
Xshell 终端3: mosquitto_sub -h localhost -t "test/groupid/1112"
② 在服务端发布主题“all”,内容为“MQTT2 all message ”,两个已订阅的客户端都可以收到此信息;
Xshell 终端4: mosquitto_pub -h localhost -t "all" -m "MQTT all message"
③ 在服务端发布主题“all/device”,内容为“ MQTT2 all device message ”,两个已订阅的客户端都可以收到此信息;
Xshell 终端4: mosquitto_pub -h localhost -t "all/device" -m "MQTT all device message"
结果:
两个已订阅的客户端都可以收到此信息;