2012-09-29 18 views
30

मैं वास्तव में एक एक्सप्रेसजेएस सर्वर के खिलाफ कुछ लोड परीक्षण कर रहा हूं, और मैंने देखा कि सर्वर द्वारा भेजी गई प्रतिक्रिया में "कनेक्शन: Keep-Alive" हेडर शामिल है। जहां तक ​​मैं इसे समझता हूं, कनेक्शन तब तक खोला जाएगा जब तक सर्वर या क्लाइंट "कनेक्शन: बंद करें" शीर्षलेख भेजता है।एक नोडजेस सर्वर में HTTP Keep-Alive टाइमआउट को कैसे सेट करें

कुछ कार्यान्वयन में, "कनेक्शन: Keep-Alive" शीर्षलेख "टाइम-एलीव" हेडर के साथ कनेक्शन टाइमआउट सेट करने के साथ आता है और लगातार कनेक्शन की अधिकतम संख्या इस कनेक्शन के माध्यम से भेजती है।

उदाहरण के लिए: "Keep-Alive: टाइमआउट = 15, अधिकतम = 100"

वहाँ एक रास्ता है (और यह प्रासंगिक है) एक एक्सप्रेस सर्वर पर इन मानकों सेट करने के लिए?

यदि नहीं, तो क्या आप जानते हैं कि एक्सप्रेसजेएस इसे कैसे संभालता है?

संपादित करें: कुछ जांच करने के बाद, मुझे पता चला है कि डिफ़ॉल्ट टाइमआउट node standard http library में स्थापित किया जाएगा:

socket.setTimeout(2 * 60 * 1000); // 2 minute timeout 

आदेश में इस को बदलने के लिए:

var http = require('http'); 

http.createServer(function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end("Hello World"); 
}).on('connection', function(socket) { 
    socket.setTimeout(10000); 
}).listen(3000); 

वैसे भी यह अभी भी लग रहा है मेरे लिए थोड़ा अजीब है कि सर्वर क्लाइंट को अपने टाइमआउट से संबंधित कोई संकेत नहीं भेजता है।

संपादन 2: अपनी टिप्पणी के लिए josh3736 के लिए धन्यवाद।

setSocketKeepAlive HTTP को-जिंदा से संबंधित नहीं है। यह एक टीसीपी-स्तर विकल्प है जो आपको यह पता लगाने की अनुमति देता है कि कनेक्शन का दूसरा सिरा गायब हो गया है।

उत्तर

20

एक्सप्रेस 3 के लिए:

var express = require('express'); 
var app = express(); 
var server = app.listen(5001); 

server.listen(3000); 

server.on('connection', function(socket) { 
    console.log("A new connection was made by a client."); 
    socket.setTimeout(30 * 1000); 
    // 30 second timeout. Change this as you see fit. 
})