mirror of https://github.com/lukechilds/node.git
Browse Source
https://groups.google.com/forum/#!topic/nodejs-dev/V5fB69hFa9o Closes GH-787.v0.7.4-release
Ryan Dahl
14 years ago
3 changed files with 91 additions and 2 deletions
After Width: | Height: | Size: 57 KiB |
@ -0,0 +1,87 @@ |
|||||
|
// We are demonstrating a problem with http.get when queueing up many
|
||||
|
// transfers. The server simply introduces some delay and sends a file.
|
||||
|
// Note this is demonstarted with connection: close.
|
||||
|
var common = require('../common'); |
||||
|
var assert = require('assert'); |
||||
|
var http = require('http'); |
||||
|
var fs = require('fs'); |
||||
|
|
||||
|
var image = fs.readFileSync(common.fixturesDir + '/person.jpg'); |
||||
|
|
||||
|
console.log("image.length = " + image.length); |
||||
|
|
||||
|
var total = 100; |
||||
|
var requests = 0, responses = 0; |
||||
|
|
||||
|
var server = http.Server(function(req, res) { |
||||
|
if (++requests == total) { |
||||
|
server.close(); |
||||
|
} |
||||
|
|
||||
|
setTimeout(function() { |
||||
|
res.writeHead(200, { |
||||
|
'content-type': 'image/jpeg', |
||||
|
'connection': 'close', |
||||
|
'content-length': image.length |
||||
|
}); |
||||
|
res.end(image); |
||||
|
}, 1); |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
server.listen(common.PORT, function() { |
||||
|
for (var i = 0; i < total; i++) { |
||||
|
(function() { |
||||
|
var x = i; |
||||
|
|
||||
|
var opts = { |
||||
|
port: common.PORT, |
||||
|
headers: { connection: 'close' } |
||||
|
}; |
||||
|
|
||||
|
http.get(opts, function(res) { |
||||
|
console.error("recv " + x); |
||||
|
var s = fs.createWriteStream(common.tmpDir + '/' + x + ".jpg"); |
||||
|
res.pipe(s); |
||||
|
|
||||
|
// TODO there should be a callback to pipe() that will allow
|
||||
|
// us to get a callback when the pipe is finished.
|
||||
|
res.on('end', function() { |
||||
|
console.error("done " + x); |
||||
|
if (++responses == total) { |
||||
|
s.on('close', checkFiles); |
||||
|
} |
||||
|
}); |
||||
|
}).on('error', function(e) { |
||||
|
console.error('error! ', e.message) |
||||
|
throw e; |
||||
|
}); |
||||
|
})(); |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
var checkedFiles = false; |
||||
|
function checkFiles() { |
||||
|
// Should see 1.jpg, 2.jpg, ..., 100.jpg in tmpDir
|
||||
|
var files = fs.readdirSync(common.tmpDir); |
||||
|
assert.equal(total, files.length); |
||||
|
|
||||
|
for (var i = 0; i < total; i++) { |
||||
|
var fn = i + '.jpg'; |
||||
|
assert.ok(files.indexOf(fn) >= 0, "couldn't find '" + fn + "'"); |
||||
|
var stat = fs.statSync(common.tmpDir + '/' + fn); |
||||
|
assert.equal(image.length, stat.size, |
||||
|
"size doesn't match on '" + fn + |
||||
|
"'. Got " + stat.size + " bytes"); |
||||
|
} |
||||
|
|
||||
|
checkedFiles = true; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
process.on('exit', function() { |
||||
|
assert.equal(total, requests); |
||||
|
assert.equal(total, responses); |
||||
|
assert.ok(checkedFiles); |
||||
|
}); |
Loading…
Reference in new issue