代码之家  ›  专栏  ›  技术社区  ›  Gustavo Topete

两个或两个以上的请求能否在Express中完全同时处理?

  •  2
  • Gustavo Topete  · 技术社区  · 6 年前

    我对这种案子还不太熟悉。看,我正在构建一个restful应用程序,基于一个快速后端和移动前端。有两种特殊类型的用户,比如说客户和工人。客户可以向所有员工发送一个通知,说他正在寻找一名员工,因此,所有员工都会收到该通知,他们必须接受或拒绝该通知,但是,只有一个可以接受,比如说最快按下“接受”按钮。所以,我怀疑,如果两个工人同时按下“接受”按钮,他们也被快递(同时)接收,会发生什么?,它们是同时处理的吗?或者节点是单线程的这一事实使得这种情况不可能发生?我只想确定,由于上述原因,不可能将两名(或两名以上)工人分配给同一个客户。

    我在网上找过这个,但是我没有找到任何东西能让我对这种情况有清醒的头脑。我真的不知道从哪里开始,所以,任何建议都被接受了。我见过node的队列管理器(比如bull),但我认为它们不是解决这个问题的方法,但我也不确定这一点,我至少需要有人给我指出解决方案的正确方向。

    谢谢!

    3 回复  |  直到 6 年前
        1
  •  3
  •   Nathan    6 年前

    使用zookeeper或异步锁 https://www.npmjs.com/package/async-lock 是的。你最不想要的是比赛条件。

        2
  •  2
  •   zhangjinzhou    6 年前

    一个简单但可能不如锁解决方案的数据库事务。一旦第一个工人接受作业,它将在数据库中添加一个标志。第二个工作进程本可以启动数据库事务,但由于上一个工作进程设置的标志,最终无法完成该进程。然后回滚整个事务。

        3
  •  0
  •   wizzwizz4    6 年前

    如果你不使用锁,你不能排除这种可能性。

    节点可能是单线程的 现在 (它不是),它可能在进入下一个用户之前为一个用户提供服务(IIRC没有),但是如果您在文档中找不到它,那么它根本就不能保证。升级总是有可能改变它的工作方式。

    然而,有一个解决办法。如果有一个语言特性可以保证一个资源在被锁定时会被其他实例锁定和不可用,那么它将为您提供所需的保证。