1

我正在使用 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);

我能做些什么?

4

1 回答 1

2

不,客户端 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);
        }
    }
}

请注意,这假设您只订阅绝对主题 - 即没有通配符。如果您使用通配符,则必须进行一些正则表达式匹配,而不是==此代码使用的测试。

于 2014-03-10T21:06:24.487 回答