[Mono-list] Web server
Clint Heyer
clint@thestaticvoid.net
Sun, 10 Feb 2002 14:19:03 +1000
Hi,
I've been following the discussion about the needs for a web server. I
started on my own very simple server a month ago that supports a few things
that people are after. The big thing it doesn't support that people want is
ASP, and the standard System.Web namespace classes. It currently supports
Select() or asynchronous communications models (it's modular).
It has a 'handler' type model, so for a given Server (there can be
multiple, later on for virtual host support), you can call:
void AddContext(Context myContext);
Which would register myContext with the server. The model is similar to the
Java servlet model. A `Context' object equates somewhat to the Java
`Servlet' object. The way the server serves static pages is by using
`FSContext' (filesystem context), which knows how to find, read and send
files. A context to handle ASP files could be coded to work in a similar
manner to IIS (hopefully with less security issues :), or a .NET object
could be dynamically instansiated to handle requests as a servlet would.
Request to context resolving is done by the server iterating though its
contexts and asking them in turn if they support the request URI. The first
context to say it can handles the request. Another method may be to do a
hashtable lookup for the a URI component (eg '/cgi-bin'), which might be
quicker (depending on how many contexts get loaded per server). Regex is
also an option...
Anyway, the code is primitive, very developmental level (read: buggy,
untuned, few comments, runs but there may be half completed code around)
but it might be a start. I fairly confident that it supports most of the
HTTP 1.0 spec, and parts of 1.1. If, heaven forbid, this is the best thing
available, I would be prepared to release the source under an Open Source
license, and help on getting the code integrated better with System.Web,
and make it ASP.NET friendly. I've posted the code on
http://student.uq.edu.au/~s359012/chwww.zip (37KB) if anyone wants to have
a gander. The code is not currently under an Open Source license, so if you
wish to use anything please contact me first.
If you want to test the code, modify the paths in Form1.cs, compile and
run. It binds to port 81 by default, bindings are outputted on startup.
That said, I think the .NET framework provides an excellent platform to
build applications such as these, to allow for fine-grained access control
for the server itself, as well as any classes loaded by the server during
execution.
cheers,
.clint
==[ Clint Heyer ]============================================
IRC: 'TheShadow' on irc.uq.edu.au
CELL: 04210-11-22-4
-------------------------[ http://thestaticvoid.net ]--------