Skip to content

Instantly share code, notes, and snippets.

@max-mapper
Last active August 29, 2015 14:06
Show Gist options
  • Star 7 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save max-mapper/b000fd8b189737e41d66 to your computer and use it in GitHub Desktop.
Save max-mapper/b000fd8b189737e41d66 to your computer and use it in GitHub Desktop.
node tcp + http speed test
var net = require('net')
var through = require('through2')
var server = process.argv[2]
var path = process.argv[3]
var host = process.argv[4]
var socket = net.connect(80, server)
var req = ["GET " + path + " HTTP/1.1\r\n",
"User-Agent: curl/7.30.0\r\n",
"Host: " + host + "\r\n",
"Accept: */*\r\n\r\n"].join('')
console.log('connecting to', server)
console.log(req)
var start = Date.now()
var resp = new Buffer(0)
var contentLength
var concat = through(function(ch, enc, next) {
if (typeof contentLength === 'undefined') {
contentLength = false
ch.toString().split('\r\r')[0].split('\r').map(function(header) {
if (header.toLowerCase().indexOf('content-length') > -1) contentLength = +(header.split(': ')[1])
})
}
resp = Buffer.concat([resp, ch])
var end = resp.slice(resp.length - 5, resp.length)
if (end.toString() === '0\r\n\r\n') socket.end()
if (contentLength && resp.length >= contentLength) socket.end()
console.log('got response chunk', ~~(ch.length / 1024) + 'kb')
next()
})
socket.pipe(concat)
socket.write(new Buffer(req))
socket.on('end', function() {
var elapsed = (Date.now() - start) / 1000
console.log({elapsed: elapsed + 's', downloaded: ~~(resp.length / 1024) + 'kb', speed: ~~(resp.length / elapsed / 1024) + 'kb/s' })
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment