有人可以解释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)
- 在使用AngularJS发送GET请求时,无法从WebStorm IDE执行“打开”无效URL
- 对HEAD请求使用express sendFile
- Node.js Q承诺forEach返回undefined
- 将https请求从angular度发送到nodejs。 无法发送任何数据
- 使用Android发送HTTP发布请求
- 为什么许多websocket库实现自己的应用程序级别的心跳?
- 为什么multipart不会产生closures事件
- 如何创build一个httpredirectHTTP请求进入端口80到HTTPS端口443?
- NodeJSstream暂停/恢复不适用于XMLHttpRequest,但与curl?