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

Reply via email to