【问题标题】:Can two or more requests be processed exactly at the same time in express?express 能否同时处理两个或多个请求?
【发布时间】:2018-12-12 06:45:10
【问题描述】:

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

我在互联网上搜索过这个,但我没有找到任何可以让我在这种情况下头脑清醒的东西。老实说,我不知道从哪里开始,所以,任何建议都被接受。我见过类似节点的队列管理器(如 Bull),但我认为它们不是这种情况的解决方案,但我也不确定,我至少需要有人指出正确的方向解决方案。

谢谢!

【问题讨论】:

    标签: node.js express concurrency


    【解决方案1】:

    使用 zookeeper 或异步锁 https://www.npmjs.com/package/async-lock 。您想要的最后一件事是竞争条件。

    【讨论】:

    • 实用建议;做得好。您可能想阅读tour;你显然是一位经验丰富的程序员。
    • 谢谢!,这可能是我正在寻找的解决方案,至少现在我有一个很好的起点
    • 我终于可以检查这是否真的对我有用,所以,我标记为正确答案。
    【解决方案2】:

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

    【讨论】:

    • 这实际上可能是一个很好的解决方案,我会研究这个解决方案,看看它是否可行
    【解决方案3】:

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

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

    但是,有一个解决方案。如果有一种语言功能可以保证资源在被锁定时会被其他实例锁定并且无法使用,那么这将为您提供所需的保证。

    【讨论】:

    • 是的,我知道这不可能完全是我们理解“单线程”语言的方式,而且我知道节点更新可能会破坏这一点。那么可能使用库可能是最好的选择
    猜你喜欢
    • 1970-01-01
    • 2021-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2018-02-23
    • 1970-01-01
    相关资源
    最近更新 更多