[erlang-questions] [ANN] Cowboy 0.2.0 - HTTP server and acceptor pool

Loïc Hoguin essen@REDACTED
Mon Sep 5 17:11:47 CEST 2011

Hello guys.

I would like to formally announce Cowboy here today with the first
tagged version: 0.2.0. This is a stable build of a development HTTP
server and pool acceptor. It is released under the ISC license, which is
a BSD license with deprecated clauses removed.


Cowboy cuts network communication into three parts: transport (tcp,
ssl), protocol (http, ftp...) and application handlers for handling and
responding to client requests. It comes with an acceptor pool that takes
transport and protocol modules and use them to listen, accept and
process requests. Each listener come with its own supervision tree that
can be started and stopped independently.

The current features include:

 * TCP and SSL transport handlers
 * HTTP protocol handler
 * Optional dispatcher for HTTP requests
 * WebSocket support (all recent browsers supported)
 * Cookie support (adapted from mochiweb by Tom Burdick)
 * OTP-like handler API for HTTP: init/3, handle/2, terminate/2
 * And for WebSocket: websocket_init/3, websocket_handle/3,
 * EUnit, common_test and PropEr tests
 * No dialyzer warnings! http://dialyzer.softlab.ntua.gr/nowarn/cowboy/

Cowboy also uses binaries instead of lists, largely reducing memory
usage. It also only uses one process per request a la gen_server,
catching and outputting a stacktrace when errors occur.

Note that WebSocket is still a draft and that changes still occur in its
specifications. Browsers do not fully implement the specs either, so we
are just aiming for supporting browsers for now.

While this release is fairly stable, keep in mind that Cowboy is still a
work in progress and that its features and API may change at some point.
Me and others are already using it in production however.

Future developments include:

 * FastCGI support (Anthony Ramine)
 * Sendfile support (Magnus Klaar)
 * Webmachine-like REST handler
 * Multipart support for file upload and compression (Anthony Ramine)
 * Allow reloading a listener's options without restarting it
 * More PropEr tests!

Finally, I'll be setting up a benchmarking environment of 4 servers to
properly test performance improvements and make sure unrelated changes
don't have a negative impact on performance. This should happen in the
next few weeks and it will have a public URL. We might also setup the
tests for other servers including C ones later on.

If you are interested in helping out, using it or have questions I'm
available by email, on the issues tracker on github or on IRC on
#erlounge or #erlang.

Thanks for reading.

Loïc Hoguin

More information about the erlang-questions mailing list