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/                 ##
##                                                            ##
################################################################

Reply via email to