It is said that IIS is not recommended for Comet programming. If that is true, how is it that other web servers are able to handle this vis a vis IIS. So what is it that other web servers do additionally which allows them to scale out.
A Comet connection means a HTTP connection between the server and the client (the Web page itself) which is left open for a longer time period. The server needs to have the following capabilities set up correctly:
- Multiple parallel connections to the same browser (the maximum number of connections per client has to be set at least to 2)
- The connection timeout (inactivity) has to be set high enough and the Web page must be capable of re-initiating lost Comet connections.
- The server has to be able to run server side scripts for an extended time period, so the "processing timeout" has to be set high enough, e.g. 1800 seconds or so.
- It is useful to support HTTP 1.1, but not required for Comet.
The easies way is to use a JavaScript framework with built-in support for Comet. See the framework's manual for more instructions on how to configure various Web servers (like ISS) correctly for Comet.
For some reason, this myth is still around. It's certainly possibly to do this with IIS, as demonstrated in our IIS-based comet server, WebSync.
The myth started with standard ASPX pages (which, if you hold open, will crap out around maybe 100 or so requests tops). It got better with async pages and handlers (which idle using much lower memory and virtually no CPU), and, with some clever working, can scale as well as, if not better than, many other comet solutions.
We have moved away from using IIS to using a custom web server built using HttpListener. IIS imposes resource limits and screws up debugging any other ASP.NET web application you have. Running it on a different App Domain minimizes but does not resolve the problem.
I'd also suggest checking out aspcomet.googlecode.com - open source and runs in IIS.