Jetty and Grizzly also work great, and can be used as easily swappable connectors for Restlet, which in turn is used by Prudence's Clojure flavor (I'm the lead developer):
http://threecrickets.com/prudence/ Jetty is the most mature of the bunch (Grizzly, Netty, MINA, etc.) and offers many more features. I always ask, though, why people think they need async I/O for a web server. Async might be important if you are streaming video, audio, etc. (And if you are, you're probably better off with a robust CDN.) But if your goal is to dynamically produce HTML, then async is close to meaningless: in the end, there must be a thread that generates the HTML (or fetched it from a cache), and that thread is likely in a pool. Sure, the socket may be read asynchronously, but you still have a thread pool at the top, with all the concerns to scalability that it entails. In fact, it's well known that some of the best performing static-file web servers are not async. For static-file web servers, async might help scalability, not performance (often these qualities are in opposition): it can help you degrade more gracefully per client under *very* high concurrency. But, depending on what you're doing, any kind of degradation may be unacceptable, and the real solution is probably to scale up/out. I wrote a long article examining these challenges as part of the Prudence Manual. There is a section that addresses async, and also highlights a select few use cases for it: http://threecrickets.com/prudence/scaling/#toc-Subsubsection-151 -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en