Hello Mongrel Users,
I’m writing a web server called Ebb. It’s written in C, makes use of
the Mongrel HTTP parser, and uses libev its event loop. The goal is to
be small, fast, and language independent server that can host web
frameworks. I have written a small Ruby binding which provides a Rack
handler - this will allow Ebb to host Rails, Merb, and other Ruby
frameworks. In the future I will write a Python WSGI binding.
The design is similar to the evented Mongrel web server. Connections
are processed as follows:
- libev loops and waits for incoming connections.
- When Ebb can read from a client socket, it passes the buffer into the
mongrel state machine which parses the headers into name value pairs.
- Ebb starts a new thread and passes the request information and peer
to a user supplied callback. The thread lasts only for the length of
- The included Ruby binding, supplying this callback transforms the
into a Rack compatible “env” variable and passes it on a Rack
The code measures in at less than 1000 lines of C code.
There is much work to do; it is not ready for use. I am soliciting
help from the community for testing and development. You may browse
the git repository at http://repo.or.cz/w/ebb.git or check out the
code with this command:
git clone git://repo.or.cz/ebb.git
I release Ebb under the MIT license.
It is very fun to program Ebb so I suggest you do too