Update: uploaded version 0.04, fixes two small things: I was using pre-release 0.8 of Mojo, and apparently I don't know how to use requires in Makefile.PL, causing a stream of CPAN tester failures.
The code is very very nice and clean, and in the future you might be able to run Catalyst apps on top of it.
The module is AnyEvent::Mojo, and I've just uploaded release 0.2, that includes keep-alive support.
There are three features that I want to do before a 1.0 release:
- Support for 100 Continue handling: I don't use it but the other Mojo::Server classes have it;
- Asynchronous processing of requests: you start processing a request, but decide that you need something from a network service somewhere. You can start that request, pause the Mojo transaction, and when you receive the response from the network service, you complete the Mojo transaction;
- build a AnyEvent HTTP client using Mojo::Client.
Fun stuff, specially the second one.
Performance-wyse, I'm happy with the result so far. The most simple Mojo::HelloWorld application is capable of this numbers:
# Start a server perl -MEV -MAnyEvent::Mojo -e 'AnyEvent::Mojo->new->run' & # Benchmark ab -k -c 10 -n 5000 http://127.0.0.1:3000/ # Executive summary Concurrency Level: 10 Time taken for tests: 6.935770 seconds Complete requests: 5000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 0 Total transferred: 795000 bytes HTML transferred: 190000 bytes Requests per second: 720.90 [#/sec] (mean) Time per request: 13.872 [ms] (mean) Time per request: 1.387 [ms] (mean, across all concurrent requests) Transfer rate: 111.88 [Kbytes/sec] received # (Quad-core 2.6Ghz, Mac OS X 10.5.4, stock perl 5.8.8)
At 700 requests per second with a 1.3 ms delay, the overhead seems to be pretty low, for a pure Perl based HTTP 1.1 compliant server.