我正在对一个包含 Windows 7 64 位操作系统上大量数据的数据库进行大量调用。由于呼叫正在排队,我得到了错误(在第一个错误之后的 HTTP 调用):
Error: connect ENOBUFS *omitted* - Local (undefined:undefined)
从我的谷歌搜索中我了解到这个错误意味着我的缓冲区变得太大并且我的系统内存无法再处理缓冲区的大小。
但是我真的不明白这是什么意思。我将 node.js 与 HTTPS 库一起使用来处理我的请求。当请求排队并且套接字打开时,缓冲区的大小是否分配在 RAM 中?什么将使缓冲区扩展到更大的大小?这仅仅是硬件限制吗?
我还读到一些操作系统能够比其他操作系统更好地处理缓冲区的大小。是这样吗?如果是这样,哪个操作系统更适合运行需要通过 HTTPS 请求获取 大量 数据的节点脚本?
这就是我如何处理我的请求。
for (let j = 0; j < dataQueries; j++) {
getData(function())
}
function getData(callback){
axios.get(url, config)
.then((res) => {
// parse res
callback(parsedRes(res))
}).catch(function(err) {
console.log("Spooky problem alert! : " + err);
})
}
为了简洁起见,我省略了一些代码,但这通常是我处理请求的方式。我有一个 for 循环,每次迭代都会通过 axios 启动 GET 请求。
我知道有一个 axios.all 命令用于存储 axios.HTTPMethod 给你的承诺,但是当我将它设置为存储承诺然后通过 axios.all 迭代承诺时,我没有看到我的代码有任何变化
原文由 A. Werner 发布,翻译遵循 CC BY-SA 4.0 许可协议
感谢@Jonasw 的帮助,但是这个问题有一个非常简单的解决方案。我使用小型库 throttled-queue 来完成工作。 (如果你查看源代码,基于这个包实现你自己的队列会很容易。
我的代码更改为: