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

Javascript 如何在NodeJS中以正确的顺序传递消息?,javascript,node.js,Javascript,Node.js,我部署了一个节点服务器,它的工作是更新物联网设备连接状态的数据库 问题 由于NodeJS是异步执行的,并且是单线程的,让我们假设我同时收到类似于断开连接和连接的状态 有时,由于nodej是异步的,连接的首先得到处理,断开的接着得到处理 这使我的数据库处于不一致的状态 需要结果 我想按照数据库在源代码处发生的顺序(即根据时间戳)更新数据库 那么,如果NodeJS是单线程的,并且每个请求彼此不共享任何内存,那么如何实现这一点呢 我建议,与其让“已连接”状态布尔字段不断地用可能出现故障的数据更

我部署了一个节点服务器,它的工作是更新物联网设备连接状态的数据库

问题

  • 由于NodeJS是异步执行的,并且是单线程的,让我们假设我同时收到类似于
    断开连接
    连接
    的状态
  • 有时,由于nodej是异步的,
    连接的
    首先得到处理,
    断开的
    接着得到处理
  • 这使我的数据库处于不一致的状态
需要结果

  • 我想按照数据库在源代码处发生的顺序(即根据时间戳)更新数据库

那么,如果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个月的数据来完成此操作。

没有此类问题,它是异步的,不是并发的,因此不存在争用条件。首先输入的请求将首先被处理,两个状态不能同时输入。

我已经使用此技术实现了一个物联网设备状态页面,我强烈推荐它。能够回顾历史可以表明问题是与网络相关还是与特定设备有关。完全同意@DonCruickshank,我也处理过这个问题。根据我的经验,你需要的数据越多越好!