turbo-http

Blazing fast low level http server

  • Owner: mafintosh/turbo-http
  • Platform:
  • License:: MIT License
  • Category::
  • Topic:
  • Like:
    0
      Compare:

Github stars Tracking Chart

turbo-http

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

npm i turbo-http

build status

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

res.setHeader(name, value)

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

value = req.getHeader(name)

Get a request header.

headers = req.getAllHeaders()

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.

 , 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 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

Main metrics

Overview
Name With Ownermafintosh/turbo-http
Primary LanguageJavaScript
Program languageJavaScript (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2018-03-01 17:08:07
Pushed At2019-05-09 20:18:48
Last Commit At2019-03-18 14:04:36
Release Count5
Last Release Namev0.3.2 (Posted on 2019-03-18 14:04:36)
First Release Namev0.1.0 (Posted on 2018-03-02 08:51:41)
用户参与
Stargazers Count1k
Watchers Count35
Fork Count47
Commits Count26
Has Issues Enabled
Issues Count15
Issue Open Count13
Pull Requests Count9
Pull Requests Open Count3
Pull Requests Close Count4
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private