繁体   English   中英

确定http结束点何时停止发送POST请求

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM