Re: [cgiapp] Streaming Large Files using PSGI

2012-10-12 Thread Mike Tonks
I've been doing some more testing and it seems to work really well.
Serving up big files quite happily, and fast!

A few additional thoughts...

The PSGI spec allows 2 useful options:

1) The subref callback as originally suggested

2) Return a filehandle and the server hadles the streaming automatically.

The filehandle option is very neat if all you need to do is send a
file to the browser.

The callback option seems useful as well because it's possible to do
stuff during or after the file streaming.  I like to write a log
message and delete temp files etc at the end so this is handy.

Also I wonder if simply returning the filehandle / subref would be
more elegant that my initial $self-psgi_streaming_callback getter /
setter idea.

I tried to think of a way to do this without hacking into
Application.pm  Stream.pm, but in the end figured it was the (best /
easiest) way to go.  Do you think we can kick this about and get in
accepted into the upstream packages?  I have written some tests and
pod documentation.

Is Purdy on this list?

Regards,

Mike

On 8 October 2012 16:55, Mike Tonks fluffym...@googlemail.com wrote:
 Hi Mark,

 Thanks for the feedback.  OK I'll have a go then.

 Here's my initial attempts...

 https://github.com/miketonks/CGI--Application

 https://github.com/miketonks/CGI-Application-Plugin-Stream

 Does this approach seem ok?

 mike


 On 5 October 2012 14:03, Mark Stosberg m...@summersault.com wrote:

 Mike,

 My reading of the spec is that you can return a callback instead of a
 body, and the Plack server should handle the rest:

 https://metacpan.org/module/PSGI#Delayed-Response-and-Streaming-Body

 If the server doesn't suppport streaming, a MiddleWare can provide it:

 https://metacpan.org/module/Plack::Middleware::BufferedStreaming

 I have not needed to do this yet myself with PSGI (but will eventually).

Mark

#  CGI::Application community mailing list  
####
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp##
####
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:  http://cgiapp.erlbaum.net/ ##
####




Re: [cgiapp] Streaming Large Files using PSGI

2012-10-12 Thread Mark Stosberg
On 10/12/2012 09:06 AM, Mike Tonks wrote:
 I've been doing some more testing and it seems to work really well.
 Serving up big files quite happily, and fast!
 
 A few additional thoughts...
 
 The PSGI spec allows 2 useful options:
 
 1) The subref callback as originally suggested
 
 2) Return a filehandle and the server hadles the streaming automatically.
 
 The filehandle option is very neat if all you need to do is send a
 file to the browser.
 
 The callback option seems useful as well because it's possible to do
 stuff during or after the file streaming.  I like to write a log
 message and delete temp files etc at the end so this is handy.
 
 Also I wonder if simply returning the filehandle / subref would be
 more elegant that my initial $self-psgi_streaming_callback getter /
 setter idea.
 
 I tried to think of a way to do this without hacking into
 Application.pm  Stream.pm, but in the end figured it was the (best /
 easiest) way to go.  Do you think we can kick this about and get in
 accepted into the upstream packages?  I have written some tests and
 pod documentation.

I'm interested in having PSGI steaming well-supported in
CGI::Application. Have you looked around at some other frameworks to see
how they handle PSGI streaming? You might find a nice prior art design
that you like, or find some lessons-learned that we don't need to
relearn here.

 Is Purdy on this list?

Best to CC him explicitly to be sure, or even contact him directly Even
if someone is subscribed, they have it filtered out of their inbox.

Mark

#  CGI::Application community mailing list  
####
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp##
####
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:  http://cgiapp.erlbaum.net/ ##
####




Re: [cgiapp] Streaming Large Files using PSGI

2012-10-08 Thread Mike Tonks
Hi Mark,

Thanks for the feedback.  OK I'll have a go then.

Here's my initial attempts...

https://github.com/miketonks/CGI--Application

https://github.com/miketonks/CGI-Application-Plugin-Stream

Does this approach seem ok?

mike


On 5 October 2012 14:03, Mark Stosberg m...@summersault.com wrote:

 Mike,

 My reading of the spec is that you can return a callback instead of a
 body, and the Plack server should handle the rest:

 https://metacpan.org/module/PSGI#Delayed-Response-and-Streaming-Body

 If the server doesn't suppport streaming, a MiddleWare can provide it:

 https://metacpan.org/module/Plack::Middleware::BufferedStreaming

 I have not needed to do this yet myself with PSGI (but will eventually).

Mark

#  CGI::Application community mailing list  
####
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp##
####
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:  http://cgiapp.erlbaum.net/ ##
####




Re: [cgiapp] Streaming Large Files using PSGI

2012-10-05 Thread Mark Stosberg

 This is as far as I've got.  Can anyone help / advise?  Maybe patching
 CAP::Stream is the way to go - I suppose it should be possible to
 detect the running environment and 'do the right thing'.

Mike,

My reading of the spec is that you can return a callback instead of a
body, and the Plack server should handle the rest:

https://metacpan.org/module/PSGI#Delayed-Response-and-Streaming-Body

If the server doesn't suppport streaming, a MiddleWare can provide it:

https://metacpan.org/module/Plack::Middleware::BufferedStreaming

I have not needed to do this yet myself with PSGI (but will eventually).

   Mark

#  CGI::Application community mailing list  
####
##  To unsubscribe, or change your message delivery options,  ##
##  visit:  http://www.erlbaum.net/mailman/listinfo/cgiapp##
####
##  Web archive:   http://www.erlbaum.net/pipermail/cgiapp/   ##
##  Wiki:  http://cgiapp.erlbaum.net/ ##
####