【问题标题】:MQTT Paho Javascript - Is it possible to define a handlerfunction per subscription?MQTT Paho Javascript - 是否可以为每个订阅定义一个处理函数?
【发布时间】:2014-04-13 22:30:26
【问题描述】:

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

我能做什么?

【问题讨论】:

  • AFAIK,只有 Go Paho MQTT 客户端支持多个处理程序。

标签: javascript handler mqtt slash paho


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2021-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多