Recently I’ve been using Mina Core from Apache to do some async/scalable multi-tier development. I originally got hooked on Mina a few years ago when I needed to use Apache Mina FtpServer for some prototypes. I found the FtpServer to be of good quality so I kept Mina in the back of my mind.
It turns out that I later wrote my own HTTP and FTP servers (unfortunately not open sourced, I don’t own the code). Now that I’m back to writing some prototypes that require a powerful socket library I have returned to using Mina (2.0). It is funny how much the networking design resembles my own designs for the HTTP server, for example in this tutorial and related examples – the use of filters, buffers and decoding state are all quite familiar looking. Guess I shouldn’t have reinvented the wheel.
But beyond that what strikes me is the number of socket libraries out there for Java. For example, I have read some positive reactions to Grizzly and to xSocket. I’m sure there are others and I wish I had more time to research them all, for I do wonder what could be so different between them all.
To make matters interesting, there are also the various web servers derived from these libraries such as xLightweb, Grizzly comes with a web server, Mina has a sub project called AsyncWeb, and then there is Simple that apparently made its own network library. Not to mention the proven standbys such as Jetty, Tomcat and Caucho Resin most of which have their own libraries. There are a lot of other Java HTTP servers too: http://java-source.net/open-source/web-servers.
Fortunately my day to day work brings me in contact with a lot of different technologies, but still its hard to keep on top of them all and to discover all the good ideas out there. Currently Simple has my eye as far as HTTP servers go and Mina as far as network libraries go. Mina is a familiar style and even if it is not the *fastest* it certainly is in the right ball park.