Вопрос по node.js, javascript – Очень простой клиент Node.js выдает ошибку ENOBUFS после многих запросов HTTP

9

У меня есть следующие настройки:

Клиент node.js выполняет сквозные запросы к серверу node.js. Менее чем через минуту клиент завершается с ошибкой ENOBUFS.

client:

(function(){ 

        var loadUrl=function(){
            var http=require('http');   
            var querystring=require('querystring'); 
            var options = {host:"localhost",port:1337,path:'/post',method:'POST'};

            var req = http.request(options, function(res){              
                res.setEncoding('utf8');
                var body='';
                res.on('data', function (chunk) {
                    body+=chunk;
                });           
                res.on('end', function (chunk) {
                    loadUrl();   
                });   
            }); 
            req.on('error', function(e) {
              console.log('problem with request: ' + e.message);
            });
            var post_data = querystring.stringify({id:0});
            req.write(post_data);
            req.end();
        }
        setTimeout(loadUrl,1000);   
    })()

server:

var http = require('http');
http.createServer(function (req, res) {
      res.writeHead(200, {'Content-Type': 'text/plain'});
      res.end('Hello World\n');
}).listen(1337, '127.0.0.1');

В то время какэтот вопрос похоже, я публикую это как обобщение исходного вопроса (я использую сообщение, а не получить), с контрольным примером.

Ваш Ответ

1   ответ
5

Если вы добавите опциюagent:false кoptions аргументhttp.request() function это отключит пул соединений, и каждый запрос будет использовать заголовокConnection: close, Это изменение позволяет клиентскому коду работать бесконечно.

var options = {agent:false, host:"localhost", port:1337, /*...*/ };

Это снизит производительность HTTP-клиентов, и вы должны будете видеть частые паузы в клиентском процессе (предположительно, когда среда выполнения V8 выполняет сборку мусора). Но, похоже, это решает вашу проблему!

Посмотрите комментарий @ joshp, посмотрите, была ли решена эта проблема в более поздней версии Node.js, или рассмотрите возможность отправки отчета об ошибке.

Error: User Rate Limit Exceeded Tom
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededgithub.com/joyent/node/issues/3269 Tom
Error: User Rate Limit Exceeded

Похожие вопросы