turbo-http
A low level http library for Node.js based on turbo-net
npm i turbo-http

WIP, this module is already really fast but there are some HTTP features
missing and easy performance gains to be had. :D :D :D
On my laptop I can serve simple hello world payloads at around 100k requests/seconds compared to 10k requests/second using node core.
Usage
const turbo = require('turbo-http')
const server = turbo.createServer(function (req, res) {
res.setHeader('Content-Length', '11')
res.write(Buffer.from('hello world'))
})
server.listen(8080)
API
server = turbo.createServer([onrequest])
Create a new http server. Inherits from the turbo-net tcp server
server.on('request', req, res)
Emitted when a new http request is received.
res.statusCode = code
Set the http status
Set a http header
res.write(buf, [length], [callback])
Write a buffer. When the callback is called, the buffer
has been completely flushed to the underlying socket and is safe to
reuse for other purposes
res.writev(buffers, [lengths], [callback])
Write more that one buffer at once.
res.end([buf], [length], [callback])
End the request. Only needed if you do not provide a Content-Length.
req.url
Request url
req.method
Request method
req.socket
Request turbo-net socket
Get a request header.
Get all request headers as a map.
req.ondata(buffer, start, length)
Called when there is data read. If you use the buffer outside of this function
you should copy it.
req.onend()
Called when the request is fully read.
Benchmarks
Comparing turbo-http to other frameworks is like comparing oranges to apples.
turbo-http could be thought of as a replacement of Node's native http module, while all available frameworks actually use it.
Benchmark it:
clone this repo,
npm i
npm run bench
Benchmark averages are taken after one warm-up round.
| turbo-http.js | 32592 | 3.03 | 2.43 |
| bare-node.js | 18396 | 5.32 | 1.98 |
| rayo.js | 16249.6 | 6.03 | 1.77 |
| polka.js | 15802.4 | 6.2 | 1.71 |
| fastify.js | 15141.6 | 6.47 | 2.26 |
| express.js | 13408.8 | 7.31 | 1.46 |
| hapi.js | 9675.6 | 10.15 | 1.42 |
Note: Nevermind these numbers, this benchmark was run on a slow computer and the above table is for illustrative purposes only.
Optionally, you may also define your test's parameters:
$> npm run bench -- -u http://localhost:5050 -c 100 -p 10 -d 5
-u (url) -Defaults to http://localhost:5050
-c (connections) -Defaults to 100
-p (pipelines) -Defaults to 10
-d (duration) -Defaults to 5 (seconds)
Acknowledgements
This project was kindly sponsored by nearForm.
License
MIT