0

背景:我正在创建一个 Node.js Web 应用程序来模拟设备并将事件发布到在 Watson IoT Platform 中注册的 Node-Red 应用程序和设备。

Node red Application 订阅事件并执行自定义逻辑。

作为 Node.js Web 应用程序的一部分,在单击 Web 应用程序中的提交按钮时,我正在提交一个带有文本框值的发布请求。我正在处理 app.js 中的请求并发布事件

问题:当我第一次提交请求时,它工作得很好。但从第二次开始,它不断尝试重新连接并重复发布事件

App.js 代码--> Post 方法部分

app.post('/status/data', function(req, res) {    console.log("3rd param is " + req.body.eid);      application.connect();   console.log("Successfully connected to our IoT service!");      application.on("connect", function () {         console.log("About to publish data ");        application.publishDeviceEvent(deviceType, deviceId, eventType, eventFormat, eventData);         console.log("published data ");    });     res.writeHead(200, "OK", {'Content-Type': 'text/plain'});   res.end();       }); 

首次发布请求 - 日志详细信息

2017 年 6 月 29 日 04:12:47.346 PM APP/PROC/WEB/0 第三个参数是 111111 2017 年 6 月 29 日 04:13:04.785 PM APP/PROC/WEB/0 [BaseClient:connect] 使用主机连接到 IoTF:ssl ://9z9mtd.messaging.internetofthings.ibmcloud.com:8883 Jun 29, 2017 04:13:04.786 PM APP/PROC/WEB/0 成功连接到我们的物联网服务!2017 年 6 月 29 日 04:13:04.814 PM APP/PROC/WEB/0 即将发布数据 2017 年 6 月 29 日 04:13:04.855 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type /CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid":222261,"loc":1234}}, QoS : 0 Jun 29, 2017 04:13:04.855 PM APP/ PROC/WEB/0 发布数据 2017 年 6 月 29 日 04:13:04.855 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected 2017 年 6 月 29 日 04:13:04.855 PM RTR/1

第二次发布请求 - 日志详细信息

x_b3_spanid:"920cb5951fe2dee3" x_b3_parentspanid:"-" Jun 29, 2017 04:13:52.908 PM APP/PROC/WEB/0 成功连接到我们的物联网服务!2017 年 6 月 29 日 04:13:52.895 PM APP/PROC/WEB/0 [BaseClient:onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0 x_b3_parentspanid:"-" Jun 29, 2017 04:13:52.908 PM APP/PROC/WEB/0 成功连接到我们的物联网服务!2017 年 6 月 29 日 04:13:52.895 PM APP/PROC/WEB/0 [BaseClient:onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0 x_b3_parentspanid:"-" Jun 29, 2017 04:13:52.908 PM APP/PROC/WEB/0 成功连接到我们的物联网服务!2017 年 6 月 29 日 04:13:52.895 PM APP/PROC/WEB/0 [BaseClient:onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0 908 PM APP/PROC/WEB/0 成功连接到我们的物联网服务!2017 年 6 月 29 日 04:13:52.895 PM APP/PROC/WEB/0 [BaseClient:onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0 908 PM APP/PROC/WEB/0 成功连接到我们的物联网服务!2017 年 6 月 29 日 04:13:52.895 PM APP/PROC/WEB/0 [BaseClient:onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0 onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0 onClose] 连接已关闭。2017 年 6 月 29 日 04:13:52.929 PM APP/PROC/WEB/0 [BaseClient:connect] Iotfclient 离线。重试连接 2017 年 6 月 29 日 04:13:52.928 PM APP/PROC/WEB/0 [BaseClient:connect] 3 秒后重试。计数 : 1 Jun 29, 2017 04:13:52.928 PM APP/PROC/WEB/0 [ApplicationClient:connnect] ApplicationClient Connected Jun 29, 2017 04:13:52.930 PM APP/PROC/WEB/0 即将发布数据 Jun 29 , 2017 04:13:53.972 PM APP/PROC/WEB/0 [ApplicationClient:publish] 发布:iot-2/type/CardSim/id/EB27FNW/evt/update/fmt/json, {"d":{"eid ":222261,"loc":1234}},服务质量:0

这个过程不断重复。请帮忙

4

1 回答 1

1

对于您的应用程序的每个 POST,您都在(重新)连接到 IoTP 并注册一个 on-connect() 回调。

不要这样做,您应该在处理 POST 的函数(如 app init)之外连接并注册任何连接时回调(不是发布 POST 数据的回调!)。

在 POST 函数中,您唯一需要做的就是调用publishDeviceEvent().

NotepublishDeviceEvent()当然是异步的,所以当函数返回时它可能实际上并没有发布。您可以通过传入一个回调来等待它,然后它会通过 res.end() 来响应调用者并写入标题。

于 2017-06-29T13:25:47.587 回答