gpt4 book ai didi

node.js - 我们如何处理express/nodejs中的请求优先级?

转载 作者:太空宇宙 更新时间:2023-11-03 23:33:34 29 4
gpt4 key购买 nike

我们都知道 NodeJs 可以处理比普通 Java 服务器更多的请求,但是如何为传入请求维护一种 FIFO 类型的结构呢?

比方说,一场限时抢购,成千上万的请求在短时间内蜂拥而至,购买数量有限的商品?

我们如何决定哪个请求首先获得产品并将产品状态从有货更改为已售完(仅作为示例)?

谢谢

最佳答案

在 Node.js 中,一次实际上只有一个请求运行(Javascript 解释器是单线程的),直到您在 native 代码中执行某种异步操作,然后另一个请求开始运行,而另一个请求正在等待 I/O。如果所有请求都需要某种有限的资源,那么这只是一场竞赛,看看哪个请求通过代码走得足够远以获取资源。如果您对服务器进行集群以增加可扩展性,那么每个集群都会运行一个 Javascript 线程。

如果你让每个传入的请求都在队列中等待,直到它之前的所有其他请求完全完成(这是可以完成的事情),那么你会严重破坏 Node.js 服务器的可扩展性,并且大多数时候它会闲置等待某些 I/O 操作完成,因此这似乎不太可能是正确的设计。

Lets say a flash sale, where thousands of requests bombard in short amount of time to buy something which is of limited quantity??

How do we decide which request gets to get the product first and change the status of the product from available to sold out (just an example)?

这里通常的方案是让第一个请求获得该资源(即使多个资源可能同时运行)。我们不知道这是否总是首先到达您的服务器的请求,但它会很接近,并且用户社区不太可能知道它是否只是由于两个请求的处理速度的差异而恰好偏离了几毫秒。

您必须确保访问共享资源(例如数据库)的代码对于并发来说是安全的,并且不会对共享数据做出任何麻烦的假设。

关于node.js - 我们如何处理express/nodejs中的请求优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35321932/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com