有人可以解释ENOBUFS错误吗?
我正在调用Windows 7 64位操作系统上包含大量数据的数据库。 由于呼叫排队,我得到的错误(第一次错误后的HTTP调用):
Error: connect ENOBUFS *omitted* - Local (undefined:undefined)
从我的谷歌search我已经了解到,这个错误意味着我的缓冲区已经变得太大,我的系统的内存不能再处理缓冲区的大小。
但是我不明白这是什么意思。 我正在使用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迭代承诺时,我看到代码中没有任何更改
感谢@Jonasw的帮助,但这个问题有一个非常简单的解决scheme。 我用小型图书馆扼杀队列完成工作。 (如果你看源代码,基于这个包实现你自己的队列将是非常容易的。
我的代码更改为:
const throttledQueue = require('throttled-queue') let throttle = throttledQueue(15, 1000) // 15 times per second for (let j = 0; j < dataQueries; j++) {\ throttle(function(){ getData(function(res){ // do parsing }) } } function getData(callback){ axios.get(url, config) .then((res) => { // parse res callback(parsedRes(res)) }).catch(function(err) { console.log("Spooky problem alert! : " + err); }) }
你同时开始了很多数据查询。 您可以使用部分recursion函数将它们链接起来,以便它们一个接一个地执行:
(function proceedwith(j) { getData(function(){ if(j<dataQueries-1) proceedwith(j+1); }); })(0)
- 如何在express.js GET请求中访问body?
- 你如何使用NodeJS在套接字上进行HTTP GET请求?
- “使用Node.js进行直接响应” – 使用不同的Node.js进程发送HTTP响应(与主进程不同)
- REST HTTP状态码如果错误Mongoose
- 使用非http(coap)快速路由
- 带有NodeJS GET请求的AngularJS失败 – “Access-Control-Allow-Headers不允许Access-Control-Allow-Headers”
- Koa的`ctx.status`没有被发送到客户端
- 在大多数端口上侦听时Node.js EACCES错误
- 使用ExpressJS服务非标准的HTTP方法