2012-09-29 37 views
30

Tôi thực sự đang thực hiện một số kiểm tra tải đối với máy chủ ExpressJS và tôi nhận thấy phản hồi gửi bởi máy chủ bao gồm tiêu đề "Kết nối: Giữ-Alive". Theo tôi hiểu, kết nối sẽ vẫn mở cho đến khi máy chủ hoặc máy khách gửi tiêu đề "Kết nối: Đóng".Làm thế nào để đặt thời gian chờ HTTP Keep-Alive trong máy chủ nodejs

Trong một số triển khai, tiêu đề "Kết nối: Giữ-Alive" đi kèm với tiêu đề "Keep-Alive" đặt thời gian chờ kết nối và số lượng yêu cầu liên tiếp tối đa gửi qua kết nối này.

Ví dụ: "Keep-Alive: timeout = 15, max = 100"

Có cách nào (và là nó có liên quan) để thiết lập các thông số trên một máy chủ Express?

Nếu không, bạn có biết ExpressJS xử lý việc này như thế nào không?

Edit: Sau một số cuộc điều tra, tôi phát hiện ra rằng thời gian chờ mặc định được thiết lập trong node standard http library:

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

Để thay đổi điều này:

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

Dù sao nó vẫn trông một chút lạ với tôi rằng máy chủ không gửi bất kỳ gợi ý nào cho khách hàng liên quan đến thời gian chờ của nó.

Chỉnh sửa2: Nhờ josh3736 cho nhận xét của mình.

setSocketKeepAlive không liên quan đến HTTP keep-alive. Nó là một tùy chọn cấp TCP cho phép bạn phát hiện rằng đầu kia của kết nối đã biến mất.

Trả lời

20

Đối với Express 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. 
}) 
Các vấn đề liên quan