gpt4 book ai didi

javascript - Node.js API - 来自多个客户端的重复数据请求

转载 作者:行者123 更新时间:2023-11-30 20:27:19 27 4
gpt4 key购买 nike

我有一个使用 Restify 的 Node.JS api,它基本上是用于在 Google 工作表中使用的其他几个 API 的聚合器。

最初打开 Google 表格时,它会向我的服务器发出多个请求,以从各种 API 请求一堆数据,然后我的服务器尽职尽责地查找并返回这些数据。

我已经实现了基本的基于内存的缓存 - 如果收到对相同数据的请求,它将从内存中为它提供服务,直到达到到期时间(我愿意很快转移到 Redis)。

我的问题是,当第一个请求仍在查找/解析/服务时,经常会收到对相同数据的第二个请求,这意味着我正在并行请求相同(几千兆字节)的数据。

我怎样才能有效地暂停第二个请求并让它等到第一个请求的数据可用?我不介意有一个高超时并等待第一个请求在第二个请求开始之前结束,或者某种“后退并在一分钟内重试”逻辑是可行的。

我认为某种 promise 或在某处保存回调对此是最好的,但我不确定对此有什么样的最佳实践或建议方法。

我不可能定期请求和缓存数据服务器端,因为客户端可以请求的值的潜在范围相当高。

最佳答案

保留 promise 的缓存。如果请求正在进行中,缓存将指示它已被请求,您仍然可以等待 Unresolved promise ,然后在数据准备好时响应两个请求。

您的其余代码将需要重构以等待缓存中的值,而不管 promise 是否已解决,并在发起请求时将条目添加到缓存中,而不是比完成。

如果缓存中的 promise 已经解决,那么 await 只会通过事件循环中的单个滴答停止您的用户函数的异步流,这意味着您可以看到待处理的请求基本上是免费的。

关于javascript - Node.js API - 来自多个客户端的重复数据请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50751591/

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