我对这种情况很陌生。看,我正在基于快速后端和移动前端构建一个宁静的应用程序。有两种特定类型的用户,比如说客户和工作人员。客户可以向所有工作人员发送一条通知,说他正在寻找一个工作人员,因此,所有工作人员都必须收到该通知,他们必须接受或拒绝该通知,但是,只有一个可以接受,比方说最快按下“接受”按钮。因此,这是我的疑问,如果两个工人完全同时按下“接受”按钮,并且他们也同时收到(同时)收到,他们会被处理吗?还是单线程的节点使这种情况不可能发生?我只想确保由于上述原因,不可能将两个(或更多)工作人员分配给同一客户。
我已经在互联网上搜索了此内容,但找不到任何可以解决这种情况的想法。老实说,我不知道从哪里开始,所以任何建议都可以接受。我已经看到了诸如节点的队列管理器之类的东西(例如Bull),但我认为它们不是这种情况的解决方案,但是我不确定这两者也不是,我至少需要有人向我指出正确的方向。解决方案。
谢谢!
答案 0 :(得分:3)
使用zookeeper或异步锁https://www.npmjs.com/package/async-lock。您最后想要的是比赛条件。
答案 1 :(得分:2)
一个简单但可能不如锁解决方案的数据库事务。一旦第一个工作人员接受了工作,它将在数据库中添加一个标志。第二个工作程序可能已经启动了数据库事务,但是由于前一个工作程序设置的标志,最终无法完成该过程。然后回滚整个交易。
答案 2 :(得分:0)
如果您不使用锁,则不能排除这种可能性。
Node可能是单线程的 now (不是),它可能会为一个用户服务,然后再转移到下一个(不是iirc),但是如果不能如果发现它写在文档中,则根本无法保证。升级总是有可能改变其工作方式。
但是,有一个解决方案。如果有一种语言功能可以确保资源在锁定时将被其他实例锁定并且无法使用,那么您将得到所需的保证。