中以正确的顺序传递消息?"/>
如何在NodeJS中以正确的顺序传递消息?
我已部署了节点服务器,其工作是更新IOT设备的连接状态数据库
问题
- 由于NodeJS是异步执行的,并且是单线程的,所以我们假设我同时收到
Disconnected
和Connected
之类的状态。 - 有时发生的是由于NodeJS异步,
Connected
首先被处理,Disconnected
接下来被处理。 - 这使我的数据库处于不一致状态。
想要结果
- 我想按源头发生的顺序更新数据库(即根据时间戳)
因此,如果NodeJS是单线程的并且每个请求彼此之间不共享任何内存,我该如何实现?
回答如下:我建议,与其保持“连接”状态布尔字段连续不断地更新潜在的乱序数据,不如保持连接状态的叙述。
例如:
|----------------------|------------------|------------------|
| Timestamp | IoT DeviceID | Connected |
|----------------------|------------------|------------------|
| 2020-05-01T10:05:00Z | 1234 | True |
|----------------------|------------------|------------------|
| 2020-05-01T10:00:00Z | 1234 | False |
|----------------------|------------------|------------------|
| 2020-05-01T08:45:00Z | 1234 | True |
|----------------------|------------------|------------------|
要获得当前的连接状态,您只需按设备ID进行查询,并按时间戳进行排序。
这样,连接/断开事件的顺序无关紧要。只要您相信时间戳记,查询时连接状态就将是准确的。
查询可能类似于:
select timestamp, device_id, connected from connection_status order by timestamp desc limit 1;
这样做的好处是,您还具有用于故障排除目的的连接诊断数据。这可能非常有用!
当然,您最终需要清除数据,但是例如,可以通过删除任何早于1个月的数据来进行清除。
更多推荐
如何在NodeJS中以正确的顺序传递消息?
发布评论