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.
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)
Create a new http server. Inherits from the turbo-net tcp server
Emitted when a new http request is received.
Set the http status
Set a http header
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
Write more that one buffer at once.
End the request. Only needed if you do not provide a Content-Length
.
Request url
Request method
Request turbo-net socket
Get a request header.
Get all request headers as a map.
Called when there is data read. If you use the buffer outside of this function you should copy it.
Called when the request is fully read.
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.
Requests/s | Latency | Throughput/Mb | |
---|---|---|---|
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 tohttp://localhost:5050
-c
(connections) -Defaults to100
-p
(pipelines) -Defaults to10
-d
(duration) -Defaults to5
(seconds)
This project was kindly sponsored by nearForm.
MIT