[web-devel] Advice on implementing a web proxy

Erik de Castro Lopo mle+hs at mega-nerd.com
Mon Nov 28 11:12:40 CET 2011


Kazu Yamamoto (山本和彦) wrote:

> You use parseURL. It returns Request whose requestBody is
> RequestBodyLBS L.empty. This means that your code does not
> relay HTTP body at all.

You are correct. So far I have really only tested this with
http GET requests. Fixing that should be trivial.

> I'm now implementing a reverse proxy. I tested several ways to realy
> HTTP body but only one solution which works is to get whole HTTP body
> as ByteString and specify it to RequestBodyLBS. This is
> store-and-forward, not pipelining.
> 
> My code can be found:
> 	https://github.com/kazu-yamamoto/wai-app-file-cgi/blob/master/Network/Wai/Application/Classic/RevProxy.hs
> 
> I'm wondering if Enumerator can implement pipelining...

It definitely can. Have a a look at the function serveRequest in
this file:

   https://github.com/erikd/simple-web-proxy/blob/master/src/simple-web-proxy.hs

On a machine with 4Gig of RAM, I have simultaneous downloaded 4
copies of a 4Gig DVD ISO through my proxy, with memory usage
never going above about 10%.

I'm going right back to basics to try and get a really good understanding
of Enumerators and Iteratees.

Cheers,
Erik
-- 
----------------------------------------------------------------------
Erik de Castro Lopo
http://www.mega-nerd.com/



More information about the web-devel mailing list