2013-10-14 17 views
5

मैं एक नोड.जेएस सर्वर पर एक वेब ऐप चला रहा हूं और मुझे हर समय ऑनलाइन होने की आवश्यकता है, इसलिए मैं हमेशा के लिए उपयोग कर रहा हूं। लेकिन यहां कुछ समय बाद मुझे क्या मिल रहा है:Node.js - सर्वर ने कनेक्शन बंद कर दिया?

Error: Connection lost: The server closed the connection. 
    at Protocol.end (/home/me/private/app/node_modules/mysql/lib/protocol/Protocol.js:73:13) 
    at Socket.onend (stream.js:79:10) 
    at Socket.EventEmitter.emit (events.js:117:20) 
    at _stream_readable.js:910:16 
    at process._tickCallback (node.js:415:13) 
error: Forever detected script exited with code: 8 
error: Forever restarting script for 3 time 

मेरे पास दो और सर्वर हैं जो लगभग 10 दिनों तक सीधे चल रहे हैं। मेरे पास सभी सर्वरों पर "रखरखाव" लूप है, जो प्रत्येक 5 मिनट या उससे भी अधिक "चयन 1" mysql क्वेरी बनाते हैं, लेकिन ऐसा लगता है कि इससे कोई फर्क नहीं पड़ता है।

कोई विचार?

संपादित करें 1

मेरे अन्य सर्वर एक समान त्रुटि दे रहे थे, मुझे लगता है कि यह "कनेक्शन समयबाह्य", तो मैं इस समारोह डाल:

function keepalive() { 
    db.query('select 1', [], function(err, result) { 
     if(err) return console.log(err);  
     console.log('Successful keepalive.'); 
    }); 
} 

और यह मेरे अन्य दो सर्वर तय । लेकिन मेरे मुख्य सर्वर पर मुझे अभी भी त्रुटि मिल रही है।

यहाँ है कैसे मैं अपने मुख्य सर्वर शुरू कर:

var https = require('https'); 
https.createServer(options, onRequest).listen(8000, 'mydomain.com'); 

मुझे यकीन है कि कौन-सा कोड देखने में रुचि रखने नहीं कर रहा हूँ। असल में सर्वर एक आरईएसटी एपीआई है और इसे हर समय रहने की जरूरत है। यह लगभग 2-5 हो रहा है, शायद 10 मिनट प्रति मिनट।

+0

ऐसा लगता है कि आपकी एप्लिकेशन स्क्रिप्ट में कुछ त्रुटियां हैं .. त्रुटि देखने के लिए हमेशा के लिए 'node app.js' चलाने की कोशिश कर रहा है। – Sriharsha

+0

लॉग में कोई त्रुटि दिखाई नहीं दे रही है, मैंने इसे नोड-देव के साथ चलाने का प्रयास किया। यह एकमात्र त्रुटि संदेश है जिसे मैं देखता हूं। –

+0

हमें अपने ऐप के बारे में और जानें, इसलिए हम समझ सकते हैं कि क्या हो रहा है। आप mysql के खिलाफ एक सॉकेट खोलते हैं? क्यूं कर? क्या यह एक दूरस्थ डेटाबेस है? – TheBronx

उत्तर

13

त्रुटि आपके HTTPS इंस्टेंस से संबंधित नहीं है, यह आपके MySQL कनेक्शन से संबंधित है।

डेटाबेस से कनेक्शन अप्रत्याशित रूप से समाप्त हो रहा है और इसे संभाला नहीं जा रहा है। इसे ठीक करने के लिए, आप मैन्युअल रीकनेक्ट समाधान का उपयोग कर सकते हैं, या आप कनेक्शन पूलिंग का उपयोग कर सकते हैं जो स्वचालित रूप से रीकनेक्ट को संभालता है।

यहां मैनुअल रीकनेक्ट उदाहरण node-mysql के दस्तावेज़ से लिया गया है।

var db_config = { 
    host: 'localhost', 
    user: 'root', 
    password: '', 
    database: 'example' 
}; 

var connection; 

function handleDisconnect() { 
    connection = mysql.createConnection(db_config); // Recreate the connection, since 
                // the old one cannot be reused. 

    connection.connect(function(err) {    // The server is either down 
    if(err) {          // or restarting (takes a while sometimes). 
     console.log('error when connecting to db:', err); 
     setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect, 
    }          // to avoid a hot loop, and to allow our node script to 
    });          // process asynchronous requests in the meantime. 
              // If you're also serving http, display a 503 error. 
    connection.on('error', function(err) { 
    console.log('db error', err); 
    if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually 
     handleDisconnect();       // lost due to either server restart, or a 
    } else {          // connnection idle timeout (the wait_timeout 
     throw err;         // server variable configures this) 
    } 
    }); 
} 

handleDisconnect(); 
+0

देर से उत्तर के लिए खेद है। मैंने बस अपने कोड को आपके उत्तर से बदल दिया और मैं सर्वर शुरू कर रहा हूं। अगर कल यह काम करता है तो हमें पता होना चाहिए :) चीयर्स –

+0

क्या यह काम करता है? @hexacyanide, किसी भी विचार पर क्यों इसकी आवश्यकता होगी? MySQL कनेक्शन क्यों खराब हो रहा है? –

+2

मैं पहली बार इस त्रुटि में आया था। महीनों के अपटाइम के बाद MySQL कनेक्शन अचानक अनुपलब्ध था। यह पता चला कि मेरे पास 'अप्रयुक्त-अपग्रेड' नामक पैकेज था, और यह एक MySQL सुरक्षा अद्यतन को स्वचालित रूप से लागू करने के लिए व्यवस्थित किया गया, जिसके परिणामस्वरूप एक MySQL सर्वर पुनरारंभ होता है। –

संबंधित मुद्दे