Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set the HTTP Keep-Alive timeout in a nodejs server

I'm actually doing some load testing against an ExpressJS server, and I noticed that the response send by the server includes a "Connection: Keep-Alive" header. As far as I understand it, the connection will remain opened until the server or the client sends a "Connection: Close" header.

In some implementations, the "Connection: Keep-Alive" header comes up with a "Keep-Alive" header setting the connection timeout and the maximum number of consecutive requests send via this connection.

For example : "Keep-Alive: timeout=15, max=100"

Is there a way (and is it relevant) to set these parameters on an Express server ?

If not, do you know how ExpressJS handles this ?

Edit: After some investigations, I found out that the default timeout is set in the node standard http library:

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

In order to change this:

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); 

Anyway it still looks a little bit weird to me that the server doesn't send any hint to the client concerning its timeout.

Edit2: Thanks to josh3736 for his comment.

setSocketKeepAlive is not related to HTTP keep-alive. It is a TCP-level option that allows you to detect that the other end of the connection has disappeared.

like image 695
Miguel L. Avatar asked Sep 29 '12 09:09

Miguel L.


People also ask

How do I set http keep alive timeout?

Keep-Alive Timeout The time (in seconds) before idle keep-alive connections are closed. Set this value in the Admin Console in the Timeout field on the configuration's Performance tab ⇒ HTTP tab, under Keep Alive Settings. The default is 30 seconds, meaning the connection times out if idle for more than 30 seconds.

How do I keep a session alive in NodeJS?

Try something like: app. use( session( { secret: 'keyboard cat', cookie: { maxAge: 60000 }, rolling: true, resave: true, saveUninitialized: false } ) );

How do I enable HTTP keep alive on web server?

Apache. If you have access to your Apache configuration file ( httpd. conf ), you can turn on Keep-Alive there. To enable HTTP Keep-Alive , set to KeepAlive On or to disable it set to KeepAlive Off .

What is Keep-Alive HTTP?

HTTP keep-alive, a.k.a., HTTP persistent connection, is an instruction that allows a single TCP connection to remain open for multiple HTTP requests/responses. By default, HTTP connections close after each request.


2 Answers

For Express 3:

var express = require('express'); var app = express(); var server = app.listen(5001);  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. }); 
like image 188
3 revs, 2 users 90% Avatar answered Oct 04 '22 12:10

3 revs, 2 users 90%


To set keepAliveTimeout on the express server do:

var express = require('express'); var app = express(); var server = app.listen(5001);  server.keepAliveTimeout = 30000;   
like image 24
Ninn Avatar answered Oct 04 '22 12:10

Ninn