[英]Determine when http end point stopped sending POST request
我有一个IoT(Arduino)设备,每6秒向我的NodeJs服务器发送一次HTTP POST请求。 来自设备的数据以JSON格式发送。 在某些时候,设备停止发送数据(假设GSM模块已关闭或者设备因某种原因关闭)我需要确定何时发生这种情况并输出类似:'设备状态:离线'我使用ExpressJs处理服务器功能,我可以轻松处理来自/到IoT设备的任何POST / GET请求但是如何确定何时不再发送POST请求?
试图检查物联网设备的IP地址(它使用带有SIM卡的GSM模块将数据发送到我的NodeJS服务器)是否可以访问,但我是Node的新手,我使用了body-parser,因此请求被自动解析为JSON和我不确定如何确定IP是否可达。
setDeviceStatus
()是一个更新数据库中缓存文件/表中设备状态(在线/离线)的函数
app.post('/floraData', (req,res,next) => {
var jsonObj = req.body;
var deviceStatusTimer = setInterval(function(){
if(jsonObj == null){
setDeviceStatus(0);
console.log("device offline");
}
else{
setDeviceStatus(1);
console.log("device is online");
}
}, 10000);
next();
});
WebSocket将是一种更简单的方法。 正如@ Gonzalo.-在评论中指出的那样,您可以从服务器发送ping请求以检查IoT设备的运行状况。
但是,WebSocket有其局限性,如果您拥有大量物联网设备,它很难扩展。 如果是这样,构建无状态应用程序(就像您现在所做的那样)将更适合长期运行。
回答您的问题,设备可以在POST请求中发送device_id
(例如MAC地址,自定义UUID等),而不是使用IP(多个设备可以共享相同的IP)来检查IoT设备。 每当服务器收到POST请求时,它应该将device_id
存储在Redis中,例如,使用last_online
时间戳。
根据您的使用情况,您可以构建另一个应用程序(例如lambda + cloudwatch)以定期检查Redis,以last_online
时间为X
分钟前的任何设备。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.