Wie zu senden, aufeinander folgende Anfragen mit der HTTP-keep-alive in node.js?
Ich bin mit node.js 0.6.18, und der folgende code macht node.js schließen der TCP-Verbindung zwischen zwei Anfragen (überprüft mit strace
auf Linux). Wie muss ich das machen node.js die Wiederverwendung der gleichen TCP-Verbindung für mehrere HTTP-Anfragen (keep-alive)? Bitte beachten Sie, dass der webserver der Lage ist, keep-alive, es funktioniert auch mit anderen clients. Der webserver gibt eine aufgeteilte HTTP-Antwort.
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()
- konnten Sie jemals herausfinden?
- Nein, ich kenne die Antwort nicht
- möchten Sie vielleicht bewusst zu sein, dass das aufrufen von work() erzeugt einen stack-Speicher-Leck. Dies ist, weil jedes Ende-Ereignis wird ein neuer Anruf auf der Arbeit(), nie loslassen den stack, es sei denn, jeder Aufruf Ende der Veranstaltung abgeschlossen ist. Um dies zu umgehen, können Sie drücken wollen arbeiten() out of scope durch den Aufruf "Prozess.nextTick(Arbeit);". Wird dieser Spielraum von den Ende-handler zu kündigen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
War ich in der Lage, diese zu arbeiten (überprüft mit strace) durch die Erstellung einer
http.Agent
und die Einstellung seinermaxSockets
- Eigenschaft auf 1. Ich weiß nicht, ob das der ideale Weg, es zu tun; jedoch, es muss den Anforderungen entsprechen. Eine Sache, die ich bemerkte, ist, dass das, was die Doku behauptet, überhttp.Agent
Verhalten nicht genau beschreiben, wie es in der Praxis funktioniert. Code unter:EDIT: ich sollte hinzufügen, dass ich habe meine Prüfung mit node.js v0.8.7
können Sie nur setzen: