Hi All,
I've recently been intrigued with this notion of "Service Streaming":
http://ajaxpatterns.org/HTTP_Streaming
in which you make use of the webserver and browsers ability to maintain
a connection using a loop on the web server. I know those of you
familiar with how IIS/asp.net (aspnet_isapi.dll) handles
HttpApplication threads (a pool) are probably very offended by this
idea but I would ask that you hear me out before flaming me :)
Performance issues aside (for a moment), I have had pretty good success
implementing a handler that keeps my connection open so that in the
browser, an AJAX-style XmlHttpRequest can remain connected and respond
to onreadystatechange events as the server pushes data.
In fact, it was rather easy : in my class implementing IHttpHandler and
within the ProcessRequest method, I merely included the following:
while(loop) { if (!context.Response.IsClientConnected) loop = false; }
context.Response.End();
where "loop" is a bool initialized as true;
The implication is that we can "futz" with HTTP response/request model
to allow a web server to act as an intermediary between clients limited
only by the number of simultaneous threads (connections) a given web
server can bear. It means chat or peer-style applications over port 80.
But I am realizing that asp.net's HttpApplication is a rather
largish-object possessing a ton of overhead one really wouldn't need
for the purpose of such applications. Basically you would be stuck with
a pretty small amount of connections that you could handle on a web
server.
I found another complication (it doesn't work and I understand there
are garbage collection issues) when I tried to implement static events
on my class that inherited HttpApplication so I could inform all
connected clients of an event (hence cause a push of data to some or
all).
I've created a few HttpModules in my time and I know that it is also
bound to HttpApplication (the HttpApplication object is pushed into
event handlers implemented in your class inheriting HttpModule) and I
realize that I can't any go further up the chain of processing (to
bypass it) without writing my own C++ Isapi filters - something I hoped
to avoid. I could write my own webserver but that is also not on my
radar.
Anyway, I was hoping for advice, comments, thoughts, suggestions on the
topic because I think it is worth investigating and could usher in a
new breed of HTTP applications now that we have AJAX support in an
increasing number of browsers.
Thanks, Rein