最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何在NodeJS中以正确的顺序传递消息?

IT培训 admin 11浏览 0评论

如何在NodeJS中以正确的顺序传递消息?

我已部署了节点服务器,其工作是更新IOT设备的连接状态数据库

问题

  • 由于NodeJS是异步执行的,并且是单线程的,所以我们假设我同时收到DisconnectedConnected之类的状态。
  • 有时发生的是由于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中以正确的顺序传递消息?

我已部署了节点服务器,其工作是更新IOT设备的连接状态数据库

问题

  • 由于NodeJS是异步执行的,并且是单线程的,所以我们假设我同时收到DisconnectedConnected之类的状态。
  • 有时发生的是由于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个月的数据来进行清除。

发布评论

评论列表 (0)

  1. 暂无评论