2012-05-15 17 views
7

Tengo la siguiente configuración:Muy simple cliente Node.js lanza ENOBUFS de error después de muchas peticiones HTTP

Un Node.js cliente realiza solicitudes de extremo a extremo a un servidor Node.js. Después de menos de un minuto, el cliente falla con el error ENOBUFS.

cliente:

(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); 
    })() 

servidor:

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'); 

Mientras this question es similar, estoy publicando esto como una generalización de la pregunta original (estoy usando mensaje y no consigo), con un caso de prueba.

Respuesta

4

El problema parece ser un problema con el grupo de conexiones de cliente HTTP Node.js.

Si agrega la opción agent:false al argumento options del http.request() function, deshabilitará la agrupación de conexiones y cada solicitud usará el encabezado Connection: close. Este cambio parece permitir que el código del cliente se ejecute indefinidamente.

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

De esta manera también degradar el rendimiento de los clientes HTTP y debería ver pausas frecuentes en el proceso de cliente (presumiblemente mientras que el tiempo de ejecución V8 hace la recolección de basura). ¡Pero parece resolver tu problema!

Comentario de Per @ joshp, vea si este problema ha sido abordado en una versión posterior de Node.js o considere la posibilidad de presentar un informe de error.

+0

Nice answer. Entonces, para @Tom, probablemente valga la pena analizar los problemas de Node para ver si se conocen o abordar en una versión posterior. – joshp

+0

@maerics - ¡Gracias! ¿En qué os reproduceste esto? ¿Alguien más reprodujo el problema? ¿En qué sistema (s) operativo (s)? Preguntándose si esto es específico de Windows. – Tom

+0

@Tom: Reproduje en Mac OS X 10.7 usando el nodo v0.6.10. – maerics

Cuestiones relacionadas