Ich versuche, einen HTTP-Client einzurichten, um die zugrunde liegende Verbindung in node.js offen zu halten (Keep-Alive), aber es scheint, dass das Verhalten nicht den Dokumenten entspricht (http://nodejs.org/api/http.html#http_class_http_agent).HTTP keep-alive in node.js
Ich erstelle einen neuen HTTP-Agenten, setze die maxSockets-Eigenschaft auf 1 und fordere jede Sekunde eine URL (zum Beispiel http://www.twilio.com/
).
Es scheint, dass bei jeder Anfrage der Socket geschlossen ist und ein neuer Socket erstellt wird. Ich habe dies mit node.js 0.10.25 und 0.10.36 unter Ubuntu 14.04 getestet.
Hat jemand die Möglichkeit gehabt, am Leben zu bleiben, um zu arbeiten? Hier
ist der Code:
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();
Was zeigt 'console.dir (res.headers.connection)' in Ihrem 'http.get()' Callback? – mscdex
Ich hatte dies bereits überprüft, und der Host gibt in der Antwort den Header "Connection: keep-alive" zurück, was darauf hinweist, dass er akzeptiert, die Verbindung offen zu halten. – quentinadam