Watson IoT& Node.JS - 连续重试&连接失败

时间:2017-06-29 10:54:25

标签: node.js iot watson-iot

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

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

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

问题:当我第一次提交请求时,它完全正常。但是从第二次开始,它不断尝试重新连接并重复发布事件

App.js代码 - >发布方法部分

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();       }); 

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

  

Jun 29,2017 04:12:47.346 PM APP / PROC / WEB / 0 3rd param is 111111 Jun   29,2017 04:13:04.785 PM APP / PROC / WEB / 0 [BaseClient:connect]   与主机连接到IoTF:   ssl://9z9mtd.messaging.internetofthings.ibmcloud.com:8883六月29,2017   04:13:04.786 PM APP / PROC / WEB / 0成功连接到我们的物联网   服务! 2017年6月29日04:13:04.814 PM APP / PROC / WEB / 0即将发布   数据Jun 29,2017 04:13:04.855 PM APP / PROC / WEB / 0   [ApplicationClient:publish]发布:   IOT-2 /类型/ CardSim / ID / EB27FNW / EVT /更新/ 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   已连接2017年6月29日04:13:04.855 PM RTR / 1

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

  

PP / PROC / WEB / 0 3rd param是222222 Jun 29,2017 04:13:52.891 PM   APP / PROC / WEB / 0 [BaseClient:connect]与主机连接到IoTF:   ssl://9z9mtd.messaging.internetofthings.ibmcloud.com:8883六月29,2017   04:13:52.891 PM RTR / 0 cardreaderapp.mybluemix.net -   [2017-06-29T10:43:52.857 + 0000]“POST / status / data HTTP / 1.1”200 10 0   “ - ”“Mozilla / 5.0(Windows NT 6.1; WOW64; rv:45.0)Gecko / 20100101   Firefox / 45.0“”108.168.250.151:18180“”169.47.199.84:63789“   x_forwarded_for:“167.230.96.8”x_forwarded_proto:“https”   vcap_request_id: “0801beea-5ab8-434b-403D-6c5cc92e9aad”   response_time:0.050970748   app_id:“0cdbfec6-ac2a-4be1-9bab-3b1933ba3c57”app_index:“0”   x_global_transaction_id:“1003954655”x_b3_traceid:“920cb5951fe2dee3”   x_b3_spanid:“920cb5951fe2dee3”x_b3_parentspanid:“ - ”2017年6月29日   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离线。重试   连接Jun 29,2017 04:13:52.928 PM APP / PROC / WEB / 0   [BaseClient:connect]在3秒内重试。数量:2017年6月29日   04:13:52.928 PM APP / PROC / WEB / 0 [ApplicationClient:connnect]   ApplicationClient已连接2017年6月29日04:13:52.930 PM   APP / PROC / WEB / 0即将发布数据2017年6月29日04:13:53.972 PM   APP / PROC / WEB / 0 [ApplicationClient:publish]发布:   IOT-2 /类型/ CardSim / ID / EB27FNW / EVT /更新/ FMT / JSON,   {“d”:{“eid”:222261,“loc”:1234}},QoS:0

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

1 个答案:

答案 0 :(得分:1)

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

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

在POST功能中,您唯一需要做的就是致电publishDeviceEvent()

注意publishDeviceEvent()当然是异步的,所以当函数返回时它可能不会实际发布。您可以通过传入回调来等待它,然后回调通过已写入标题的res.end()来响应调用者。