一、JavaScript基础知识:对象(object)
在获取到MQTT服务通过websocket推送过来的message之后:
<script src="https://cdn.bootcss.com/paho-mqtt/1.0.2/mqttws31.min.js"></script>
<script type="text/javascript">
client = new Paho.MQTT.Client("www.liefyuan.top", Number(9001), "websockets-test");//建立客户端实例
client.connect({onSuccess:onConnect});//连接服务器并注册连接成功处理事件
function onConnect() {
console.log("onConnected");
client.subscribe("chat");//订阅主题
console.log("subscribed");
//发送消息
message = new Paho.MQTT.Message("helloWS");
message.destinationName = "chat";
client.send(message);
console.log("sended")
}
client.onConnectionLost = onConnectionLost;//注册连接断开处理事件
client.onMessageArrived = onMessageArrived;//注册消息接收处理事件
function onConnectionLost(responseObject) {
if (responseObject.errorCode !== 0) {
console.log("onConnectionLost:"+responseObject.errorMessage);
console.log("连接已断开");
}
}
function onMessageArrived(message) {
console.log("收到消息:"+message.payloadString);
document.getElementById("messageShow").value+=message.payloadString;
document.getElementById("messageShow").value+="\n";
}
function sendMsg() {
message = new Paho.MQTT.Message(document.getElementById("msg").value);
message.destinationName = "chat";
client.send(message);
console.log("sended")
}
</script>
然后获取的message是个对象,所以有必要看看这个对象中到底有哪些属性:
for (i in message) {
console.log(i); //获得属性
console.log(message[i]); //获得属性值
}
于是打印出来的有:
_getPayloadString:function(){return"string"==typeof t?t:c(t,0,t.length)}
_getPayloadBytes:function(){if("string"==typeof t){var e=new ArrayBuffer(r(t)),s=new Uint8Array(e);return a(t,s,0),s}return t}
_getDestinationName:function(){return s}
_setDestinationName:function(e){if("string"!=typeof e)throw new Error(g(l.INVALID_ARGUMENT,[e,"newDestinationName"]));s=e}
_getQos:function(){return n}
_setQos:function(e){if(0!==e&&1!==e&&2!==e)throw new Error("Invalid argument:"+e);n=e}
_getRetained:function(){return i}
_setRetained:function(e){if("boolean"!=typeof e)throw new Error(g(l.INVALID_ARGUMENT,[e,"newRetained"]));i=e}
_getDuplicate:function(){return o}
_setDuplicate:function(e){o=e}
payloadString:66
payloadBytes:54,54
destinationName:wemos/chat
qos:0
retained:false
duplicate:false
二、订阅多个主题
原理:
利用MQTT的主题匹配来实现:比如你有主题:test/mcu/1、test/mcu/2、test/mcu/3那么你在订阅主题的使用“test/mcu/+”,那么上面的主题都被订阅了。
订阅之后如何分开数据?
就如上所说的利用下面这个属性来分开数据:
destinationName:wemos/chat