Re: HTTP::Request/Response (was Re: the CGI.pm in Perl 6)

2006-09-15 Thread Michael Snoyman

On 9/14/06, Darren Duncan [EMAIL PROTECTED] wrote:


Having had some prior experience in tackling this problem (eg,
CGI::Portable), I will endeavour to work on / help with the Perl 6
analogy to HTTP::Request/Response, so to replace the use of
corresponding aspects of CGI.pm.



I really like this idea.  I was actually working on a threaded HTTP server
in Perl that used that exact approach.  The idea was that you could write a
HTTP::Server::Threaded::Handler implementation; this could easily work for
CGI as well.  I can't test my code, since my Pugs installation is currently
broken (I've been working on it from work, and I'm trying to get everything
working in Cygwin right now).  However, I've posted my code at this URL:

http://oss.snoyman.com/HTTP-Server-Threaded.tar.gz

As a note to Audrey: This is what I was asking about threads for; I added
the async statement, but haven't tested it.

Michael


HTTP::Request/Response (was Re: the CGI.pm in Perl 6)

2006-09-14 Thread Darren Duncan

At 5:00 PM -0700 9/14/06, Aankhen wrote:

There were a few discussions with Juerd and others in #perl6 about
CGI.pm in Perl 6... if anyone's interested, I'll look for the logs.
The major feeling was that there should be no CGI.pm (if someone was
hellbent on using it, they could use the Perl 5 module).  Rather,
there needs to be proper seperation of concerns.  Maybe instead of
just importing CGI, you'd now import HTTP::Request::CGI and
HTML::Generator (I'm throwing names out at random, although I did
write HTTP::Request::CGI as a subclass of HTTP::Request whose members
are populated in a manner similar to CGI.pm's parsing of %ENV).


While I wasn't involved in that discussion, I agree with the 
sentiment you have expressed here, wherein there should be no 
CGI.pm in Perl 6.


(Moreover, we should probably make an effort that no Perl 6 module 
will have just a top-level namespace as its name unless it is a core 
module or it is a framework.)


Having had some prior experience in tackling this problem (eg, 
CGI::Portable), I will endeavour to work on / help with the Perl 6 
analogy to HTTP::Request/Response, so to replace the use of 
corresponding aspects of CGI.pm.


Note that the design strategy I had used in CGI::Portable was to have 
a pure container object representing a request and/or response, which 
was used sort of like this:


1. At start of handling an HTTP request, the main server runloop 
creates a new Request Container and has it populated by invoking a 
module function that knows about a particular environment, such as 
IO::Socket vs mod_perl vs CGI or whatever.


2. The main runloop calls the application's main per-request handling 
function; that function reads its HTTP input details from Request 
Container and writes its HTTP output details to Response Container.


3. At end of handling an HTTP request, the main server runloop 
invokes a module function that knows about a particular environment, 
and that function outputs whatever the Response Container represents.


Note that, in the general case, the Request/Response containers would 
not have any ties to outside environment, though in specific cases 
where input and output are too large to easily fit in RAM at once, 
there can be enhancements.


-- Darren Duncan