esh

eshttp

Portable pure JavaScript ES6/2015 HTTP library

Showing:

Readme

eshttp

Build Status

Portable pure JavaScript ES6 HTTP library. Includes fast streaming regex-free parser for HTTP/1.0 and HTTP/1.1.

  • pure JavaScript (ES6/2015)
  • high-performance and low-level, no stream abstractions
  • portable, multiple backends support (Node.js/other platforms)

USAGE

npm install eshttp

Requires ES6/2015 JS engine (Node.js 4.0). Example web server using eshttp:

'use strict';
const eshttp = require('eshttp');
const server = new eshttp.HttpServer();
const response = new eshttp.HttpResponse(200, { 'x-header': 'value' }, 'hello');

server.onrequest = request => {
  request.respondWith(response);
};

server.listen(8080);

TODO

  • parser improvements
  • chunked responses
  • fetch api

BENCHMARK

$ node -v
v4.2.1

Node.js builtin http module:

$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/
Running 30s test @ http://127.0.0.1:8080/
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    21.12ms    2.32ms  98.16ms   88.23%
    Req/Sec     1.25k   489.35     4.03k    83.52%
  336337 requests in 30.09s, 38.81MB read
  Socket errors: connect 155, read 181, write 0, timeout 0
Requests/sec:  11177.42
Transfer/sec:      1.29MB

eshttp:

$ wrk -t12 -c400 -d30s http://127.0.0.1:8080/
Running 30s test @ http://127.0.0.1:8080/
  12 threads and 400 connections
  Thread Stats   Avg      Stdev     Max   +/- Stdev
    Latency    11.46ms    1.75ms  76.40ms   94.03%
    Req/Sec     1.76k     1.36k    5.97k    62.83%
  630789 requests in 30.10s, 72.79MB read
  Socket errors: connect 155, read 130, write 21, timeout 0
Requests/sec:  20959.47
Transfer/sec:      2.42MB

API

const eshttp = require('eshttp');

eshttp.HttpResponse

Represents immutable HTTP response.

HttpResponse.constructor(code, headers, body)

Construct immutable HTTP response object that can be reused multiple times to serve different clients.

ArgumentTypeDescription
codenumberHTTP code
headersHeaders | objectResponse headers object
bodystringResponse body string
const response = new eshttp.HttpResponse(200, { server: 'eshttp' }, 'OK.');

eshttp.HttpRequest

Represents immutable HTTP request.

HttpRequest.constructor(method, path, headers, body)

Construct immutable HTTP request object that can be reused multiple times.

ArgumentTypeDescription
methodstringHTTP request method (e.g. 'GET')
pathstringRequest path
headersHeaders | objectRequest headers object
bodystringRequest body string (optional)
const request = new eshttp.HttpRequest('GET', '/', { 'User-Agent': 'eshttp' });

eshttp.HttpServer

Represents HTTP server.

HttpServer.constructor()

Construct HTTP server object.

const server = new eshttp.HttpServer();

HttpServer.listen(port)

Start listening to HTTP requests.

server.listen(8080);

HttpServer.close()

Stop listening.

server.close();

HttpServer.onrequest = function(request)

Request handler callback.

server.onrequest = request => {
  console.log('new incoming request');
};

##LICENSE

MIT