我正在使用 MQTT Paho Javascript (mqttws31.js
) 制作一个 Web 应用程序。
在我的 onMessageArrived
函数中,我现在通过以下代码定义到达的消息:
var topic = message.destinationName;
var message = message.payloadString;
var n = topic.lastIndexOf('/');
var result = topic.substring(n + 1);
switch(result){
case "register":{
//registerhandler
}
break;
case "data":{
//datahandler
}
break;
default:{
alert("wrong topic");
}
};
有没有更好的方法来检查主题?
是否可以为每个订阅定义一个 messageArrived
函数?
我知道定义 messageArrived
的唯一方法是在 client.connect
函数之前。
我知道订阅的唯一方法是在连接后执行 client.subscribe
。
定义例如:client.subscribe("registertopic", registerhandlerfunction); 会非常方便
我能做什么?
最佳答案
不,客户端 API 不提供此功能。
您有几个选择。要么照你现在做的做;硬编码一系列 if/then/elses 或 switch/cases。或者,您可以轻松地将自己的包装器添加到客户端库,从而为其提供更通用的功能。
例如,以下未经测试的代码:
var subscriptions = [];
function subscribe(topic,callback) {
subscriptions.push({topic:topic,cb:callback});
mqttClient.subscribe(topic);
}
mqttClient.onMessageArrived = function(message) {
for (var i=0;i<subscriptions.length;i++) {
if (message.destinationName == subscriptions[i].topic) {
subscriptions[i].cb(message);
}
}
}
请注意,这假设您仅订阅绝对主题 - 即没有通配符。如果您使用通配符,则必须执行一些正则表达式匹配,而不是此代码使用的 ==
测试。
关于javascript - MQTT Paho Javascript - 是否可以为每个订阅定义一个处理函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22306631/