Я запускаю програму Express.js, використовуючи Socket.io для чату webapp, і я отримую таку помилку випадковим чином приблизно 5 разів протягом 24 годин. Процес вузла завернуто назавжди і він негайно перезапуститься.
Проблема полягає в тому, що перезапуск Express виганяє моїх користувачів із своїх кімнат, і цього ніхто не хоче.
Веб-сервер проксі-сервер HAProxy. Проблем із стабільністю розетки немає, просто використовуючи веб-розетки та транспортні флеш-розетки. Я не можу це відтворити спеціально.
Це помилка з вузлом 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)
Як я можу знати, що викликає це? Як отримати більше помилок?
Гаразд, не дуже багатослівний, але ось стек-трек з Лонгхоном:
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)
Чи може це бути причиною?