Я запускаю приложение Express js с socket.io для чата webapp, и я получаю следующую ошибку случайным образом около 5 раз в течение 24h. Процесс node завернут навсегда и перезапускается непосредственно.
Проблема в том, что перезапуск экспресс выкидывает моих пользователей из своих комнат и никто этого не хочет.
Веб-сервер проксируется HAProxy. Нет проблем со стабилизацией сокета, просто используя переносы веб-портов и флеш-карт. Я не могу воспроизвести это специально.
Это ошибка с 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
EDIT (2013-07-22)
Добавлен обработчик ошибок клиента socket.io и обработчик исключенных исключений. Кажется, что эта ошибка обнаруживается:
process.on('uncaughtException', function (err) {
  console.error(err.stack);
  console.log("Node NOT Exiting...");
});
Поэтому я подозреваю, что это не проблема socket.io, а HTTP-запрос на другой сервер, который я делаю, или соединение mysql/redis. Проблема в том, что стек ошибок не помогает мне идентифицировать мою проблему с кодом. Вот вывод журнала:
Error: read ECONNRESET
    at errnoException (net.js:900:11)
    at TCP.onread (net.js:555:19)
Как я узнаю, что вызывает это? Как я могу получить больше от ошибки?
Хорошо, не очень многословно, но вот стоп-трасса с "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] ] } }
Здесь я обслуживаю файл политики флеш-сокета:
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)
Может ли это быть причиной?
