【发布时间】:2013-12-31 18:49:27
【问题描述】:
所以我有一个使用MQTT 的节点应用程序。我想将我所有的 MQTT 客户端创建逻辑封装在一个地方以简化重构。我写了一个类似下面的模型:
var mqtt = require('mqtt')
, host = 'localhost'
, port = '1883';
var settings = {
keepalive: 30000,
protocolId: 'MQIsdp',
protocolVersion: 3,
username:'testuser',
password:'testpass'
}
exports.createClient = function(clientId){
if(clientId){
settings.clientId = clientId;
}//otherwise default
return mqtt.createClient(port, host, settings);
}
我对 node 很陌生,我会说我有中级 javascript 编程技能。无论出于何种原因,每当我在创建多个客户端的情况下运行此代码时,一切都会崩溃。他们玩得不好,互相踢对方的联系。
但是,如果我将完全相同的代码直接放入每个文件中,则没有问题。团队中一位更有经验的节点开发人员说,这可能与节点缓存用户模块的方式有关?每当多次调用 create client 时,代码实际上不会返回新的客户端实例。
如何重写这个简单的工厂以使其正常运行?
【问题讨论】:
-
deviceId来自哪里? -
我们应该克隆设置变量,你怎么能用单端口调用createClient?
-
@vkurchatkin 一个不同的模块。我删除了对代码不必要的任何内容并错过了这一点。我将其编辑掉
-
@damphat 我认为在函数外部定义的设置将在每个设备上保持一致。但是,正如您所看到的,我在哪里传递了 clientId,其他属性可以附加到对象
标签: javascript node.js factory mqtt