Comment envoyer des requêtes consécutives avec HTTP keep-alive dans node.js?
Je suis en utilisant node.js 0.6.18, et le code suivant fait node.js fermer la connexion TCP entre tous les deux demandes (vérifié avec strace
sur Linux). Comment puis-je faire node.js la réutilisation de la même connexion TCP pour plusieurs requêtes HTTP (c'est à dire keep-alive)? Veuillez noter que le serveur web est capable de les garder en vie, il travaille avec d'autres clients. Le serveur web renvoie un bloc de réponse HTTP.
var http = require('http');
var cookie = 'FOO=bar';
function work() {
var options = {
host: '127.0.0.1',
port: 3333,
path: '/',
method: 'GET',
headers: {Cookie: cookie},
};
process.stderr.write('.')
var req = http.request(options, function(res) {
if (res.statusCode != 200) {
console.log('STATUS: ' + res.statusCode);
console.log('HEADERS: ' + JSON.stringify(res.headers));
process.exit(1)
}
res.setEncoding('utf8');
res.on('data', function (chunk) {});
res.on('end', function () { work(); });
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
process.exit(1);
});
req.end();
}
work()
avez-vous été capable de comprendre cela?
non, je ne connais pas la réponse
vous voudrez peut-être conscient que l'appel de travail() permet de créer une pile de fuite de mémoire. C'est parce que chaque événement de fin va ajouter un nouvel appel au travail(), ne jamais relâcher la pile, à moins que tous les appels de fin de l'événement. Pour contourner ce problème, vous pouvez pousser de travail() hors de portée en appel ".nextTick(de travail);". Cela permettra à la portée de la fin de gestionnaire de résilier.
non, je ne connais pas la réponse
vous voudrez peut-être conscient que l'appel de travail() permet de créer une pile de fuite de mémoire. C'est parce que chaque événement de fin va ajouter un nouvel appel au travail(), ne jamais relâcher la pile, à moins que tous les appels de fin de l'événement. Pour contourner ce problème, vous pouvez pousser de travail() hors de portée en appel ".nextTick(de travail);". Cela permettra à la portée de la fin de gestionnaire de résilier.
OriginalL'auteur pts | 2012-06-05
Vous devez vous connecter pour publier un commentaire.
J'ai pu obtenir que cela fonctionne (vérifié avec strace) par la création d'un
http.Agent
et l'établissement de sesmaxSockets
propriété 1. Je ne sais pas si c'est le moyen idéal de le faire; cependant, il est conforme aux exigences. Une chose que j'ai remarqué est que les docs revendiquée surhttp.Agent
comportement n'a pas de décrire de manière précise la façon dont il a travaillé dans la pratique. Le Code ci-dessous:EDIT: j'ajoute que j'ai fait mes tests avec node.js v0.8.7
OriginalL'auteur Charles Hooper
vous pouvez simplement mettre:
OriginalL'auteur Krishna Srinivas