2015-01-20 5 views
17

मेरी परियोजना को हर बार एक नया बंदरगाह स्थापित करने की आवश्यकता है जब हर बार मेरी कक्षा का एक नया उदाहरण तत्काल हो।नोडज यादृच्छिक मुफ्त टीसीपी बंदरगाह

नोड.जेएस में मैं अपने नए सॉकेट सर्वर में सेट करने के लिए एक मुफ्त टीसीपी पोर्ट कैसे ढूंढ सकता हूं? या जांचें कि मेरा निर्दिष्ट पोर्ट पहले से उपयोग किया गया है या नहीं।

उत्तर

28

आप एक यादृच्छिक, नि: शुल्क बंदरगाह निर्दिष्ट द्वारा ओएस द्वारा आवंटित करने के लिए बाध्य कर सकते हैं बंदरगाह के लिए 0। इस तरह आप दौड़ की स्थिति के अधीन नहीं हैं (उदाहरण के लिए एक खुले बंदरगाह की जांच करना और इससे पहले कि आप इसे बांधने का मौका प्राप्त कर सकें, कुछ प्रक्रियाएं बाध्यकारी हों)।

फिर आप server.address().port पर कॉल करके निर्दिष्ट पोर्ट प्राप्त कर सकते हैं।

उदाहरण:

var net = require('net'); 

var srv = net.createServer(function(sock) { 
    sock.end('Hello world\n'); 
}); 
srv.listen(0, function() { 
    console.log('Listening on port ' + srv.address().port); 
}); 
+0

यह है एक अच्छा जवाब है, लेकिन परीक्षण के लिए इस मामले में एक बंदरगाह यदि उपलब्ध है मुझे पता नहीं आज़माएं/कैच का उपयोग करने और पुन: प्रयास की जरूरत है हूँ,? – Kefka

+0

यदि आप एक विशिष्ट पोर्ट चाहते हैं, तो बस इसे सुनकर देखें और त्रुटि ईवेंट की जांच करें। अगर आपको कोई त्रुटि मिलती है और 'error.code ===' EADDRINUSE'' तो आपको पता है कि बंदरगाह उपयोग में है। – mscdex

+0

हाँ, यह एक अच्छा अपहरण है, लेकिन पुनः प्रयास उबाऊ है:/मेरे मामले में मैं अपना जवाब उपयोग करूंगा, लेकिन आपका जवाब अन्य चीजों के लिए बेहतर है = डी – Kefka

1

एक खोला टीसीपी के बंदरगाह को खोजने के लिए आप मॉड्यूल portastic

उपयोग कर सकते हैं आप इस प्रकार का बंदरगाह पा सकते हैं:

port = require('portastic'); 

options = { 
    min : 8000, 
    max : 8005 
} 

port.find(options, function(err, data){ 
    if(err) 
     throw err; 
    console.log(data); 
}); 
संबंधित मुद्दे