我运行Debian 8 6的NodeJS,并与IBM沃森物联网平台玩耍连接的NodeJS对象:https://github.com/ibm-watson-iot/iot-nodejs请共享数据库/内存
我创建了一个IBM的网关,并能使用以下代码连接并发布数据:
var gatewayClient = new iotf.IotfGateway(config);
gatewayClient.connect();
gatewayClient.on('connect', function(){
gatewayClient.publishGatewayEvent("status","json",'{"d" : { "cpu" : 60, "mem" : 50 }}');
});
配置包含有关我的唯一网关的唯一信息。
我现在面临的挑战是,我希望能够在其他NodeJS实例中重用gatewayClient
。所以我想的有点像以下(伪代码):
var gatewayClient = new iotf.IotfGateway(config);
gatewayClient.connect();
sharedDatabase-perhaps-Redis[unique-gatewayClient-ID].push(gatewayClient);
然后在同一台服务器上的任何我的NodeJS可以拨打:
sharedDatabase-perhaps-Redis[unique-gatewayClient-ID].publishGatewayEvent("status","json",'{"d" : { "cpu" : 60, "mem" : 50 }}');
我希望这是有意义的,但如果它是可存档的,如何以及如果Redis可以成为解决方案或其他数据库类型的东西,我有点困惑。
整个想法是能够保持连接活动/持久性,并让来自不同NodeJS实例的客户端通过该实例推送数据,而不会创建新的连接。
我有我的设备JSON数据发布到使用Express来听我的NodeJS应用在端口80上。此数据应通过网关连接发布到IBM,该连接可能已建立,也可能尚未建立。如果它已经建立,那么应该使用它,如果不是,那么应该建立它,以便其他人可以在未来重新使用它。 –
哦,我想我明白你的意思了:你需要为每个独特的客户创建一个新的连接。让我想一想。 – robertklep
好吧,我想现在我已经做了一个证明,我只是在我的Express之外创建一个数组,以存储IBM gatewayClients。然后在收到HTTP POST时检查isConnected。这似乎是一个诀窍,但跨服务器(未来)的扩展可能会很困难...... –