You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository has been archived by the owner on Apr 22, 2023. It is now read-only.
Sufficiently large responses cause node.js some internal confusion that makes it never emit an 'end' event.
The following node.js code reproduces the problem. It appears to be chunked mode only, if you change 'res.writeHead(200, {"transfer-encoding":"chunked"});' to 'res.writeHead(200, {"content-length": len*chunk.length});' it exits successfully.
var sys = require("sys"),
fs = require("fs"),
http = require("http"),
url = require("url");
// Produce a very large response.
var chargen = http.createServer(function (req, res) {
var chunk = '01234567890123456789';
var len = req.headers['x-len'];
res.writeHead(200, {"transfer-encoding":"chunked"});
for (var i=0; i<len; i++) {
res.write(chunk);
}
res.close();
});
chargen.listen(9000);
// Proxy to the chargen server.
var proxy = http.createServer(function (req, res) {
var proxy_req = http.createClient(9000, 'localhost')
.request(req.method, req.url, req.headers);
proxy_req.addListener('response', function(proxy_res) {
res.writeHead(proxy_res.statusCode, proxy_res.headers);
proxy_res.addListener('data', function(chunk) {
res.write(chunk);
});
proxy_res.addListener('end', function() {
res.close();
});
});
proxy_req.close();
});
proxy.listen(9001);
function call_chargen(list) {
if (list.length > 0) {
sys.debug("calling chargen for " + list[0] + " chunks.");
var req = http.createClient(9001, 'localhost').request('/', {'x-len': list[0]});
req.addListener('response', function(res) {
res.addListener('end', function() {
sys.debug("end for " + list[0] + " chunks.");
list.shift();
call_chargen(list);
});
});
req.close();
}
else {
sys.puts("End of list.");
proxy.close();
chargen.close();
}
}
call_chargen([ 100, 1000, 10000, 100000, 1000000 ]);
The text was updated successfully, but these errors were encountered:
Sufficiently large responses cause node.js some internal confusion that makes it never emit an 'end' event.
The following node.js code reproduces the problem. It appears to be chunked mode only, if you change 'res.writeHead(200, {"transfer-encoding":"chunked"});' to 'res.writeHead(200, {"content-length": len*chunk.length});' it exits successfully.
The text was updated successfully, but these errors were encountered: