Próbuję skonfigurować klienta HTTP, aby utrzymać podstawowe połączenie otwarte (keep-alive) w pliku node.js, ale wygląda na to, że zachowanie nie jest zgodne z dokumentami (http://nodejs.org/api/http.html#http_class_http_agent).HTTP keep-alive w pliku node.js
Tworzę nowego agenta HTTP, ustawiając właściwość maxSockets na 1 i żądając adresu URL (na przykład http://www.twilio.com/
) na sekundę.
Wygląda na to, że na każde żądanie gniazdo jest zamykane i tworzone jest nowe gniazdo. Testowałem to z node.js 0.10.25 i 0.10.36 pod Ubuntu 14.04.
Czy ktoś był w stanie utrzymać się przy życiu?
Oto kod:
var http = require("http");
var agent = new http.Agent();
agent.maxSockets = 1;
var sockets = [];
function request(hostname, path, callback) {
var options = {
hostname: hostname,
path: path,
agent: agent,
headers: {"Connection": "keep-alive"}
};
var req = http.get(options, function(res) {
res.setEncoding('utf8');
var body = "";
res.on('data', function (chunk) {
body += chunk;
});
res.on('end', function() {
callback(null, res, body);
});
});
req.on('error', function(e) {
return callback(error);
});
req.on("socket", function (socket) {
if (sockets.indexOf(socket) === -1) {
console.log("new socket created");
sockets.push(socket);
socket.on("close", function() {
console.log("socket has been closed");
});
}
});
}
function run() {
request('www.twilio.com', '/', function (error, res, body) {
setTimeout(run, 1000);
});
}
run();
Co zawiera 'console.dir (res.headers.connection)' w twoim wywołaniu zwrotnym 'http.get()'? – mscdex
Już to sprawdziłem, a host odbiera w odpowiedzi odpowiedź "Połączenie: keep-alive", co oznacza, że akceptuje on pozostawienie otwartego połączenia. – quentinadam