Bir sohbet web uygulaması için Socket.io kullanarak bir Express.js uygulaması çalıştırıyorum ve 24 saat boyunca rastgele yaklaşık 5 kez aşağıdaki hatayı alıyorum. Düğüm süreci sonsuza kadar sarılır ve hemen kendini yeniden başlatır.
Sorun şu ki, Express'i yeniden başlatmak kullanıcılarımı odalarından çıkarıyor ve kimse bunu istemiyor.
Web sunucusu HAProxy tarafından proxy uygulanmıştır. Sadece websockets ve flashsockets aktarımlarını kullanan soket kararlılığı sorunları yoktur. Bunu bilerek çoğaltamıyorum.
Düğümdeki hata 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
DÜZENLE (2013-07-22)
Hem socket.io istemci hatası işleyicisi hem de yakalanmayan özel durum işleyicisi eklendi. Bunun hatayı yakaladığı anlaşılıyor:
process.on('uncaughtException', function (err) {
console.error(err.stack);
console.log("Node NOT Exiting...");
});
Bu yüzden bunun bir Socket.io sorunu değil, yaptığım başka bir sunucuya HTTP isteği veya MySQL / Redis bağlantısı olduğundan şüpheleniyorum. Sorun, hata yığınının kod sorunumu tanımama yardımcı olmamasıdır. Günlük çıktısı:
Error: read ECONNRESET
at errnoException (net.js:900:11)
at TCP.onread (net.js:555:19)
Buna neyin sebep olduğunu nasıl bilebilirim? Hatadan nasıl daha fazla yararlanabilirim?
Tamam, çok ayrıntılı değil ama işte Longjohn ile olan yığın takibi:
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] ] } }
İşte ben flaş soket ilke dosyası hizmet:
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)
Sebep bu olabilir mi?