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

时间:2019-05-13 00:00:19

标签: node.js

我有一个IoT(Arduino)设备,该设备每6秒将HTTP POST请求发送到我的NodeJs服务器。 来自设备的数据以JSON格式发送。 在某个时候,设备停止发送数据(假设GSM模块被关闭,或者设备由于某种原因被关闭),我需要确定何时发生并输出类似“设备状态:离线”的信息 我使用ExpressJ来处理​​服务器功能,并且可以轻松处理来自/到IoT设备的任何POST / GET请求,但如何确定何时不再发送POST请求?

试图检查IoT设备的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();

});

1 个答案:

答案 0 :(得分:0)

WebSocket将是一个更简单的方法。正如@ Gonzalo.-在评论中指出的那样,您可以将ping请求从服务器发送到运行状况检查IoT设备。

但是,WebSocket有其局限性,如果您有很多IoT设备,则很难扩展。如果是这样,从长远来看,像现在所做的那样构建无状态应用程序将更适合。

回答您的问题,而不是使用IP(多个设备可以共享相同的IP)对IoT设备进行健康检查,该设备可以通过以下方式发送device_id(例如MAC地址,自定义UUID等) POST请求。每当服务器收到POST请求时,它都应将device_id存储在Redis中,例如,带有last_online时间戳。

根据您的用例,您可以构建另一个应用程序(例如lambda + cloudwatch)来定期检查last_online时间是X分钟前的任何设备的Redis。