javascript - MQTT Paho Javascript - 是否可以为每个订阅定义一个处理函数?

标签 javascript handler mqtt slash paho

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

相关文章:

javascript - 如何从多输入中的 FileReader 函数获取文件名?

Javascript Hangman,字母不显示,显示数字

javascript - 这种关联排序的方式使用起来安全吗?

java - 连接到代理时 MQTT Android Studio 应用程序崩溃

java - Spring 从 MQTT 出站 channel 适配器获取事件

JavaScript 框架和 JSON 模式

netbeans - Gtk-WARNING 无法在 netbeans 上找到信号处理程序

android - 处理程序正在阻止 Activity 完成

c# - 通用处理程序中的 session ?

apache-kafka - MQTT 代理和 Apache Kafka 有什么区别