Well me and my faithful Mongrel2 cohorts have been knocking down tickets in Mongrel2 with our goal of Aug 31st to release Mongrel2 1.0. Since I announced the 1.0 goal we've completed everything but 5 tickets and implemented all the features we needed. There's also been some big leaps in the number of languages we support.
First, you can grab the latest 1.0beta4 from the main page and you can follow the GettingStarted docs for a fast course in getting it up and running. After that we've been maintaining the Manual as we make features so everything is documented. We've adopted a policy that a feature isn't done until it's documented in the manual.
Our test coverage is also fairly high for a C project, and you can take a look at where we're at so far. Our test suite isn't entirely automated but we can get decent coverage with about 80% automation.
Tomorrow I'm going to be solving a bug I found and then auditing code looking for bugs and inconsistencies.
We also have Ruby, Python, C++, PHP, Haskell, Common Lisp, Perl, .NET, and Lua as supported programming languages for handlers. That makes 9 programming languages, and most of them can run things like Rack, WSGI, Plack and ASP.NET for running web applications.
People are getting into using Mongrel2 and kicking the tires, and making cool stuff apart from just these langauage bindings. Abram Hindle did a fun one where he combined Perl, Mongrel2, Harbinger, and CSound to do a real-time web interface to control music. Check out his PDF for his presentation where he gets into some gritty details about Mongrel2 from a Perl perspective.
Mongrel2 now has lots of tweakable settings that end up being nearly every global variable we could safely give you access to. Our settings system is also designed to have reasonable defaults so if you don't set one, then that's alright.
As we define more configuration elements that are global to the whole system we'll be putting them in the settings. We also got it so you can attach routes to arbitrary handlers and proxies.
We've solved the problem of massive uploads by implementing an Async Upload protocol that prevents giant files from choking your backends. The async system is designed to first hit your handlers with an announcement message saying an upload is coming, streams it to a tempfile, then a final message with the path to the tmpfile. This lets you do async backend processing without special background runners or anything.
We also gave you the ability to kill a connection from a handler by sending a 0 byte message. Combined with the Async Upload protocol this means you can prevent large files from killing your server by just killing the connection after you get the first announcement message.
The roughest and probably coolest feature from an operations perspective is the Control Port which gives you a domain socket that you can access to monitor and control Mongrel2 processes. I ditched the SIGQUIT signal for dumping status, and instead you use m2sh to connect to the control socket to issue commands.
You can then get status on currently running tasks (kind of an internal ps), current socket connections and how old they are, the time on the server, and you can kill connections by their id. The UI to this is fairly raw but it works well and I've been playing with it live since I wrote it.
The control port takes over the roll of timeouts in Mongrel2. Since all of Mongrel2's communication is async it was too hard to develop a policy of what should be timed out or not. Instead your handlers can kill connections with a kill message, and you can use the control port to monitor and kill them how you need.
Mongrel2 was, for a very short time, the first web server to support /dev/null for scalability and sharding performance. It worked well, but the usefulness of it was limited. Still, I agree with the original rationale for its inclusion and plan to create a better /dev/null handler that accepts POSTs for real-time async event drive web scale cloud storage.
Stay tuned on this.
That wraps up all the stuff we've done in the last few weeks and it looks like we'll be able to release a very feature rich and complete Mongrel2 as 1.0. It will contain about 80% of the features you find in other web servers, and then we'll add only what's really necessary in 2.0.
If you try it out and hit bugs, please submit a ticket.
Also if you're interested in Mongrel2 and would like to meet up with me next week then let me know.