订阅多个主题,使用通配符或创建实例?
Subscribing Multiple Topics, using wildcards or creating instances?
我目前正在进行一个项目,其中包括使用 MQTT。我正在 node.js 中编写我的应用程序。我的项目需要 connect/communicate 到每个设备指定的多个设备和不同的主题。稍后,来自每条消息的数据将存储到数据库中(MongoDB)。我正在使用来自 npmjs.com 1.
的 mqtt 包
下面是mqtt包代码示例:
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://test.mosquitto.org');
client.on('connect', function () {
client.subscribe('presence');
client.publish('presence', 'Hello mqtt');
});
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString());
client.end();
});
我的问题是我应该如何从设备获取消息。我可以使用“#”轻松列出单个主题以获取所有主题,但我必须手动 sort/split 主题等
不过,我正在考虑另一种选择,我将为每个主题创建新的 mqtt 客户端实例,但我不知道实例是否有任何限制。我可能会使用异步包 2 中的 forever 函数。我的代码可能是这样的:
var async = require('async');
var mqtt = require('mqtt');
var client = mqtt.connect("URL of MQTT broker");
var _topic = "";
var Subscriber = function(topic){
this._topic = topic;
client.on('connect', function () {
client.subscribe(this.topic.setter);
});
async.forever(
function(next){
client.on('message', function (topic, message) {
// TO DO store message
});
},
function(err){
client.end();
}
);
};
module.exports = Subscriber;
有没有人有什么推荐?
我不建议为您要进行的每个订阅创建单独的连接。每个连接都是一个新的 TCP 连接,会浪费您的应用程序和代理中的资源。
这里的正常模式是使用通配符订阅。消息回调处理程序被传递给消息出现的主题,因此,只要您明智地构建主题 space,在您的应用程序中适当路由消息的开销就很小。
我目前正在进行一个项目,其中包括使用 MQTT。我正在 node.js 中编写我的应用程序。我的项目需要 connect/communicate 到每个设备指定的多个设备和不同的主题。稍后,来自每条消息的数据将存储到数据库中(MongoDB)。我正在使用来自 npmjs.com 1.
的 mqtt 包下面是mqtt包代码示例:
var mqtt = require('mqtt');
var client = mqtt.connect('mqtt://test.mosquitto.org');
client.on('connect', function () {
client.subscribe('presence');
client.publish('presence', 'Hello mqtt');
});
client.on('message', function (topic, message) {
// message is Buffer
console.log(message.toString());
client.end();
});
我的问题是我应该如何从设备获取消息。我可以使用“#”轻松列出单个主题以获取所有主题,但我必须手动 sort/split 主题等
不过,我正在考虑另一种选择,我将为每个主题创建新的 mqtt 客户端实例,但我不知道实例是否有任何限制。我可能会使用异步包 2 中的 forever 函数。我的代码可能是这样的:
var async = require('async');
var mqtt = require('mqtt');
var client = mqtt.connect("URL of MQTT broker");
var _topic = "";
var Subscriber = function(topic){
this._topic = topic;
client.on('connect', function () {
client.subscribe(this.topic.setter);
});
async.forever(
function(next){
client.on('message', function (topic, message) {
// TO DO store message
});
},
function(err){
client.end();
}
);
};
module.exports = Subscriber;
有没有人有什么推荐?
我不建议为您要进行的每个订阅创建单独的连接。每个连接都是一个新的 TCP 连接,会浪费您的应用程序和代理中的资源。
这里的正常模式是使用通配符订阅。消息回调处理程序被传递给消息出现的主题,因此,只要您明智地构建主题 space,在您的应用程序中适当路由消息的开销就很小。