turbo-http

Blazing fast low level http server

  • 所有者: mafintosh/turbo-http
  • 平台:
  • 许可证: MIT License
  • 分类:
  • 主题:
  • 喜欢:
    0
      比较:

Github星跟踪图

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

主要指标

概览
名称与所有者mafintosh/turbo-http
主编程语言JavaScript
编程语言JavaScript (语言数: 1)
平台
许可证MIT License
所有者活动
创建于2018-03-01 17:08:07
推送于2019-05-09 20:18:48
最后一次提交2019-03-18 14:04:36
发布数5
最新版本名称v0.3.2 (发布于 2019-03-18 14:04:36)
第一版名称v0.1.0 (发布于 2018-03-02 08:51:41)
用户参与
星数1k
关注者数35
派生数47
提交数26
已启用问题?
问题数15
打开的问题数13
拉请求数9
打开的拉请求数3
关闭的拉请求数4
项目设置
已启用Wiki?
已存档?
是复刻?
已锁定?
是镜像?
是私有?