मैं एक चैट वेबऐप के लिए Socket.io का उपयोग करके एक Express.js एप्लिकेशन चला रहा हूं और 24h के दौरान मुझे लगभग 5 बार बेतरतीब ढंग से निम्नलिखित त्रुटि मिलती है। नोड प्रक्रिया हमेशा के लिए लपेटी जाती है और यह तुरंत ही फिर से चालू हो जाती है।
समस्या यह है कि एक्सप्रेस को फिर से शुरू करने से मेरे उपयोगकर्ता अपने कमरे से बाहर निकल जाते हैं और कोई भी ऐसा नहीं चाहता है।
वेब सर्वर 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)
दोनों सॉकेट को जोड़ा गया। क्लाइंट त्रुटि हैंडलर और अनकैप्ड अपवाद हैंडलर। लगता है कि यह एक त्रुटि पकड़ता है:
process.on('uncaughtException', function (err) {
console.error(err.stack);
console.log("Node NOT Exiting...");
});
इसलिए मुझे संदेह है कि यह सॉकेट.आईओ समस्या नहीं है, लेकिन एक अन्य सर्वर से 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)
क्या इसका कारण हो सकता है?