I’ve had some bad experiences lately with the Tomcat 6 Comet APIs with the NIO Connector.  I have a simple COMET servlet that spawns a thread and waits 5 seconds to respond to a Firefox browser.  I also call event.setTimeout(10000) (timeout on the event of 10 seconds).  After the response is finished writing I call event.close();  When using the Tomcat NIO, I don’t see a response until after event.setTimeout() time.  So, if I set the timeout to 100 seconds I don’t see a response in the browser for 100 seconds.

Maybe I’m not adding some undocumented secret sauce, but when I test this out with JBoss Web and our APR connector, it works as expected: I see a response in the browser after 5 seconds.  I also had a go with Servlet 3.0 through Jetty 7.0 pre3.  Works as expected there as well.

This isn’t the only problems I’ve had.  I also had a ClassCastException when I add a ServletFilter in front of a COMET Servlet.  The APIs assume that all your filters implement CometFilter.  Granted, I experienced this particular problem in the version of Tomcat 6 that ships with JBoss 4.2.3.GA, but after trying out the timeout problem described above with Tomcat 6 binaries from apache.org, I didn’t bother going any further to see if this was a JBoss specific problem or not.  I did test to see if JBossWeb has the same problem…As expected it DID NOT.

So what’s the deal here?

  1. I’m just stupid?
  2. Nobody uses Tomcat 6 COMET + NIO APIs?
  3. Everybody who is doing asynchronous HTTP is using Jetty?
  4. Asynchronous HTTP is just hype generated by Greg Wilkins to breath new life into his increasingly irrelevant company?

My personal guess is that 2-3 are the main problems, with #1 a high possibility, with a sprinkle of 4.  Anybody out there have any experiences with Tomcat 6 + COMET + NIO?

As a result of this, I’m not going to support COMET + Tomcat NIO with RESTEasy’s Async HTTP APIs.  Only Jetty and JBossWeb.