首页 文章

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

提问于
浏览
0

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

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

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

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

App.js Code - >发布方法部分

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 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即将发布数据Jun 29,2017 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已连接2017年6月29日04:13:04.855 PM RTR / 1

Second time POst Request - Log Details

PP / PROC / WEB / 0第3次参数是222222 2017年6月29日04:13:52.89 PM PM / PROC / WEB / 0 [BaseClient:connect]使用主机:ssl://9z9mtd.messaging.internetofthings连接到IoTF . 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 :“ - ”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离线 . 重试连接Jun 29,2017 04:13:52.928 PM PM / 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}},QoS:0

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

1 回答

  • 1

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

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

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

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

相关问题