h2o travis-ci

H2O - an optimized HTTP server with support for HTTP/1.x and HTTP/2

H2O - an optimized HTTP server with support for HTTP/1.x and HTTP/2

Build Status

Copyright © 2014,2015 DeNA Co., Ltd., Kazuho Oku, Tatsuhiko Kubo, Domingo Alvarez Duarte, Nick Desaulniers, Marc Hörsken, Masahiro Nagano, Jeff Marrison

H2O is a very fast HTTP server written in C. It can also be used as a library.

This is the README for H2O version 1.0.1-alpha1 (HEAD).

License

The MIT License.

Includes third-party softwares (also licensed under the MIT license): klib, picohttpparser, hpack-huffman-table.h.

Features

  • HTTP/1.0, HTTP/1.1
  • HTTP/2
    • supports the final version, draft 14 and 16
    • negotiation methods: NPN, ALPN, Upgrade, direct
    • dependency and weight-based prioritization
    • server push
  • WebSocket
    • uses wslay
    • only usable at library level
  • TLS
    • uses OpenSSL
    • forward secrecy
    • AEAD ciphers
    • OCSP stapling (automatically enabled)
    • session resumption and session tickets (internal memory)
  • static file serving
    • conditional GET using last-modified / etag
    • directory listing
    • mime-type configuration
  • reverse proxy
    • HTTP/1 only (no HTTPS)
    • persistent upstream connection
  • access-logging
    • apache-like format strings
  • graceful restart and self-upgrade

Using the Standalone Server

Installation

Following softwares are required to build the standalone server. It is likely that you would be possible to find and install them as part of your operation system (by running yum, apt-get, brew, etc. depending on the OS).

Download and extract a source release from here, or clone the Git repository.

Run the commands below. The last command installs h2o (the standalone server) to usr/local.

$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local .
$ make
$ sudo make install

Type make test to run the unit tests (note that extra components are required for running the tests; a complete list of prerequisites can be found in the before_script section of .travis.yml).

Running the Server

First, let’s try running the server using a configuration file included in the examples/ directory. The command below invokes the standalone server using examples/h2o/h2o.conf, which directs the server to listen on port 8080. Try accessing http://127.0.0.1:8080/.

$ h2o -c examples/h2o/h2o.conf

Use --help to print a list of command line options and configuration directives that can be used.

$ ./h2o --help

Building the Library

H2O can also be used as a software library with libuv version 1.0.0. Note that prior versions of libuv cannot be used due to massive changes to the APIs in 1.0.0.

Examples can be found within the examples/ directory.

For the time being, using libh2o as a submodule is the recommend way.

$ cmake .
$ make libh2o

Benchmarks

Remote Benchmark

The scores were recorded on Amazon EC2 running two c3.8xlarge instances (server and client) on a single network placement.

benchmark results

note: for reverse-proxy tests, another H2O process running on the same host was used as the upstream server

Local Benchmark

The scores (requests/second.core) were recorded on Ubuntu 14.04 (x86-64) / VMware Fusion 7.1.0 / OS X 10.9.5 / MacBook Pro 15” Early 2013

HTTP/1.1

Server \ size of content 6 bytes 4,096 bytes
h2o/0.9.0 75,483 59,673
nginx/1.7.9 (conf) 37,289 43,988

note: wrk -c 500 -d 30 -t 1

HTTP/2

Server \ size of content 6 bytes 4,096 bytes
h2o/0.9.0 (conf) 272,300 116,022
tiny-nghttpd (nghttpd @ ab1dd11) 198,018 93,868
trusterd @ cff8e15 167,306 67,600

note: h2load -c 500 -m 100 -n 2000000

Further Reading

Related Repositories

h2o

h2o

H2O - the optimized HTTP/1, HTTP/2 server ...

h2o-2

h2o-2

h2o = fast statistical, machine learning & math runtime for bigdata ...

h2o-3

h2o-3

Open Source Fast Scalable Machine Learning API For Smarter Applications (Deep Learning, Gradient Boosting, Random Forest, Generalized Linear Modeling (Logistic Regression, Elastic Net), K-Means, PCA, Stacked Ensembles...) ...

benchm-ml

benchm-ml

A minimal benchmark for scalability, speed and accuracy of commonly used open source implementations (R packages, Python scikit-learn, H2O, xgboost, Spark MLlib etc.) of the top machine learning algorithms for binary classification (random forests, gradie ...

nagios-plugins

nagios-plugins

Hadoop, Redis, Elasticsearch, Solr, HBase, Cassandra & DataStax OpsCenter, MongoDB, MySQL, Kafka, Riak, Memcached, Couchbase, Mesos, Spark, Neo4j, Datameer, H2O, WanDisco, Yarn, HDFS, Impala, Apache Drill, ZooKeeper, Cloudera, Hortonworks, MapR, IBM BigIn ...


Top Contributors

kazuho mback2k cubicdaiya maksqwe syohex Stanback hirose31 swinghu lestrrat deepakprakash mingodad suzukaze kazeburo matt-42 pborreli tatsuhiro-t 0-wiz-0 kimoto mattn

Releases

-   v1.0.0 zip tar
-   v0.9.2 zip tar
-   v0.9.1 zip tar
-   v0.9.0 zip tar