HTTP keep-alive dans node.js
Je suis en train de mettre en place un client HTTP pour garder la connexion sous-jacente ouvert (keep-alive) node.js mais il semble que le comportement ne correspond pas à la documentation (http://nodejs.org/api/http.html#http_class_http_agent).
Je suis entrain de créer un nouveau HTTP agent, réglage de la maxSockets propriété 1 et demande une url (par exemple http://www.twilio.com/
) chaque seconde.
Il semble que, pour chaque demande, le socket est fermé et un nouveau socket est créée.
J'ai testé avec node.js 0.10.25 et 0.10.36 sous Ubuntu 14.04.
Quelqu'un a été capable de se maintenir en vie au travail?
Voici le 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();
Ce n'
J'avais déjà vérifié, et l'hôte retourne "Connection: keep-alive" en-tête de la réponse, indiquant qu'il accepte de garder la connexion ouverte.
console.dir(res.headers.connection)
montrer à l'intérieur de votre http.get()
de rappel?J'avais déjà vérifié, et l'hôte retourne "Connection: keep-alive" en-tête de la réponse, indiquant qu'il accepte de garder la connexion ouverte.
OriginalL'auteur quentinadam | 2015-01-30
Vous devez vous connecter pour publier un commentaire.
Si je ne me trompe pas le pool de connexion a été mis en œuvre dans 0.12.
Donc, si vous voulez avoir un pool de connexion avant 0.12 vous pouvez simplement utiliser la demande module:
Si vous utilisez le nœud de 0,12+ et vous souhaitez utiliser le HTTP de base du module directement, alors vous pouvez l'utiliser pour initialiser votre agent:
Avis de la
keepAlive: true
propriété, c'est-à nécessaire de garder le socket ouvert.Vous pouvez passer à un agent de la demande module ainsi, de nouveau, qui ne fonctionne que sur 0.12+ sinon la valeur par défaut à l'intérieur de la piscine de mise en œuvre.
Je n'ai même pas remarqué que le post date. De toute façon, toujours ma réponse est valable.
OriginalL'auteur simo
Je suppose qu'il doit travailler sur le nœud de 0,12+. Vous pouvez également utiliser un autre agent à cet effet. Par exemple keep-alive-agent pouvez faire ce que vous voulez:
OriginalL'auteur advncd
Ci-dessous a travaillé pour moi dans le météore qui utilise le module npm pour keepaliveagent
À la fois les appels de méthode renvoie des données dans une connexion de socket. Vous passez les options dans chaque appel de méthode
OriginalL'auteur Vinay Prabhakaran