[Opensim-dev] HttpServer overview & RFC
Justin Clark-Casey
jjustincc at googlemail.com
Wed May 28 17:41:39 UTC 2008
+1
me too
Frisby, Adam wrote:
> Looks good!
>
>
>
> +1
>
>
>
> Adam
>
>
>
> *From:* opensim-dev-bounces at lists.berlios.de
> [mailto:opensim-dev-bounces at lists.berlios.de] *On Behalf Of *Dr Scofield
> *Sent:* Wednesday, 28 May 2008 2:07 AM
> *To:* opensim-dev at lists.berlios.de
> *Subject:* [Opensim-dev] HttpServer overview & RFC
>
>
>
> hi all, another request for comments :-)
>
> i've been chewing on HttpServer and how to use it instead of the .NET
> HttpListener stuff. here's first a short overview of HttpServer and what
> it offers (keyword is "short", for more details have a look at
> opensim-libs/HttpServer), then some thoughts on how we could make use of it.
>
> HttpServer basically offers the following ways of processing HTTP requests:
>
> * HttpListener()
> * HttpModule
> * Controllers
>
> == HttpListener ==
>
> HttpListener (not the .NET one!) basically works like this:
>
> HttpListener listener;
> listener = new HttpListener(IPAddress.Any, 80);
> listener.RequestHandler += OnRequest;
> listener.Start(5);
>
> with OnRequest like this:
>
> void OnRequest(HttpClientContext client, HttpRequest request)
> {
> ...
> client.Respond(...);
> }
>
> to support HTTPS, all we need to do is load an X509 certificate and pass
> that in to the HttpListener constructor.
>
> == HttpModule ==
>
> HttpModule basically allows us to register an HttpModule derived object
> with an HttpServer object (which internally uses HttpListener). Each
> registered module gets invoked to handle an incoming request (similar to
> the handler idea alan webb brainstormed about a couple of days ago) and
> can signal back whether it has handled the request.
>
> == Controller ==
>
> Controller finally is kind of a pre-canned REST handler making use of
> the first three parts of an URL (slash is separator) as "addressing"
>
> http://localhost/user/view/1
>
>
> (example from
> http://www.codeplex.com/webserver/Wiki/View.aspx?title=Part%20five%20-%20Using%20controllers&referringTitle=Home
> <http://www.codeplex.com/webserver/Wiki/View.aspx?title=Part%20five%20-%20Using%20controllers&referringTitle=Home>)
>
> would address the controller module User (or UserController) and invoke
> the method View() with the value "1".
>
>
> == Authentication ==
>
> Authentication is via Authentication modules as well as via callbacks
> where required (for example for DigestAuthentication the callback occurs
> to get the password).
>
>
> == making use of HttpServer ==
>
> what i'd actually like to implement (either as an HttpModule or as an
> HttpListener handler) is an event--event handler scheme:
>
> * incoming HTTP request is pushed as an OSHttpRequest object into an
> HTTP request queue.
> * each OSHttpRequest encapsulates
> o the HTTP request header,
> o an input stream fed by the remote client,
> o an output stream feeding the remote client
> o method to produce OSHttpResponse object (for signaling
> redirects, setting status codes, etc)
> * we have a pool of OSHttpRequest pumps that take OSHttpRequest
> objects and pump them via the registered event handlers to whoever
> registered an interest (via multicast mechanism that stefan
> already explained a couple of days ago as well)
> * event handlers return either
> o Pass --- didn't act on it
> o Handled --- acted on it, response return as out parameter
> o Detach --- acting on it, taking care of it myself, don't do
> anything
> * if no event handler acted on the OSHttpRequest, we return an error
> code
> * as soon as as we get a Handled or Detached response we stop going
> through the handlers
> * if we get a Handled we OSHttpResponse.SendHeaders and close the
> input and output streams
>
> any event handler that returns Detached is responsible for sending
> response header and for dealing with the input and output stream itself
> --- and could, for example, keep an HTTP connection open, implementing a
> long poll scheme, for example.
>
> BaseHttpServer would offer two events to which event handlers could
> attach: OnHttpRequest and OnHttpsRequest.
>
>
> what do you think?
>
> cheers,
> dr scofield/dirk
>
>
> --
>
> dr dirk husemann ---- virtual worlds research ---- ibm zurich research lab
>
> SL: dr scofield ---- drscofield at xyzzyxyzzy.net <mailto:drscofield at xyzzyxyzzy.net> ---- http://xyzzyxyzzy.net/
>
> RL: hud at zurich.ibm.com <mailto:hud at zurich.ibm.com> - +41 44 724 8573 - http://www.zurich.ibm.com/~hud/ <http://www.zurich.ibm.com/%7Ehud/>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Opensim-dev mailing list
> Opensim-dev at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-dev
--
justincc
Justin Clark-Casey
http://justincc.wordpress.com
More information about the Opensim-dev
mailing list