Socket
Book a DemoInstallSign in
Socket

turbo-http

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

turbo-http

Blazing fast low level http server

latest
Source
npmnpm
Version
0.3.2
Version published
Weekly downloads
46
2.22%
Maintainers
1
Weekly downloads
 
Created
Source

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/sLatencyThroughput/Mb
turbo-http.js325923.032.43
bare-node.js183965.321.98
rayo.js16249.66.031.77
polka.js15802.46.21.71
fastify.js15141.66.472.26
express.js13408.87.311.46
hapi.js9675.610.151.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

FAQs

Package last updated on 18 Mar 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts