in

sockets – ¿Cómo depuro el error ECONNRESET en Node.js?

apple touch icon@2

Estoy ejecutando una aplicación Express.js usando Socket.io para una aplicación web de chat y obtengo el siguiente error al azar alrededor de 5 veces durante 24 horas. El proceso del nodo está envuelto para siempre y se reinicia automáticamente.

El problema es que reiniciar Express expulsa a mis usuarios de sus salas y nadie quiere eso.

El servidor web es proxy de HAProxy. No hay problemas de estabilidad de socket, solo usando transportes websockets y flashsockets. No puedo reproducir esto a propósito.

Este es el error con Node v0.10.11:

    events.js:72
            throw er; // Unhandled 'error' event
                  ^
    Error: read ECONNRESET     //alternatively it s a 'write'
        at errnoException (net.js:900:11)
        at TCP.onread (net.js:555:19)
    error: Forever detected script exited with code: 8
    error: Forever restarting script for 2 time

EDITAR (2013-07-22)

Se agregaron el controlador de errores del cliente socket.io y el controlador de excepciones no detectado. Parece que este detecta el error:

    process.on('uncaughtException', function (err) {
      console.error(err.stack);
      console.log("Node NOT Exiting...");
    });

Entonces sospecho que no es un problema de Socket.io, sino una solicitud HTTP a otro servidor que hago o una conexión MySQL / Redis. El problema es que la pila de errores no me ayuda a identificar mi problema de código. Aquí está la salida del registro:

    Error: read ECONNRESET
        at errnoException (net.js:900:11)
        at TCP.onread (net.js:555:19)

¿Cómo sé qué causa esto? ¿Cómo saco más provecho del error?

Ok, no muy detallado, pero aquí está el stacktrace con Longjohn:

    Exception caught: Error ECONNRESET
    { [Error: read ECONNRESET]
      code: 'ECONNRESET',
      errno: 'ECONNRESET',
      syscall: 'read',
      __cached_trace__:
       [ { receiver: [Object],
           fun: [Function: errnoException],
           pos: 22930 },
         { receiver: [Object], fun: [Function: onread], pos: 14545 },
         {},
         { receiver: [Object],
           fun: [Function: fireErrorCallbacks],
           pos: 11672 },
         { receiver: [Object], fun: [Function], pos: 12329 },
         { receiver: [Object], fun: [Function: onread], pos: 14536 } ],
      __previous__:
       { [Error]
         id: 1061835,
         location: 'fireErrorCallbacks (net.js:439)',
         __location__: 'process.nextTick',
         __previous__: null,
         __trace_count__: 1,
         __cached_trace__: [ [Object], [Object], [Object] ] } }

Aquí sirvo el archivo de política de socket flash:

    net = require("net")
    net.createServer( (socket) =>
      socket.write("<?xml version="1.0"?>n")
      socket.write("<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">n")
      socket.write("<cross-domain-policy>n")
      socket.write("<allow-access-from domain="*" to-ports="*"/>n")
      socket.write("</cross-domain-policy>n")
      socket.end()
    ).listen(843)

¿Puede ser esta la causa?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

circuit switching

Conmutación de red

PFXviQo655Ep7zsPX69BLc 1200 80

Battlefield 2042 beta: qué está sucediendo, cuándo y cómo unirse