Recent releases of Catalyst makes it possible to stream write, although you 
need to be careful when using a blocking web server (long stream will of course 
block the available listener).

Older versions of Catalyst had similar ability with the write method, I never 
used it, and would be happen to get patches or test cases to make it work as 
we'd like.

Here's a link to an example, this one assume AnyEvent as a loop, but you could 
use a similar technique with any web server, as long as you don't mind blocking:

https://metacpan.org/pod/release/JJNAPIORK/Catalyst-Runtime-5.90049_005/lib/Catalyst/Response.pm#res-write_fh


If you follow that, you will see stuff 'stream' as you wish unless there is 
some buffering going on at some other level of the stack.

Johnn



On Thursday, October 31, 2013 4:22 PM, Daniel J. Luke <dl...@geeklair.net> 
wrote:
 
I replicated this today outside of Catalyst (just a small 
FCGI/FCGI::ProcManager test script). If anyone else has seen this/fixed it, I'd 
appreciate a pointer. I'll report back to the list if/when I get it resolved so 
that there's an answer in the list archives for future people to google 
otherwise.


On Oct 31, 2013, at 10:12 AM, Daniel J. Luke <dl...@geeklair.net> wrote:
> We're actually running Catalyst::Runtime 5.80031 (currently), so I believe 
> it's using Catalyst::Engine::FastCGI which just does *STDOUT->syswrite()
> 
> I guess I try to do some testing with newer Catalyst (and maybe alternate 
> deployment methods), to see if that changes anything. Looking through the 
> Changelog, I didn't see anything specifically related to this, though 
> (although I imagine the Plack stuff makes it somewhat different in the more 
> recent releases). 
> 
> On Oct 30, 2013, at 11:03 PM, Hailin Hu <i...@h2l.name> wrote:
>> It is an engine relevant stuff.
>> Find which engine you are using ( for example, Plack::Handler::FCGI )
>> and look around codes around write(r), you may find something.
>> Good luck :)
>> 
>> On Wed, Oct 30, 2013 at 9:51 AM, Daniel J. Luke <dl...@geeklair.net> wrote:
>>> I've got some legacy CGI code that does a bunch of processing and uses the 
>>> old hack of $| = 1; print "foo\n"; do_work(); print "foo done\n"; etc. 
>>> (solution #1 from http://wiki.catalystframework.org/wiki/longcomputations)
>>> 
>>> While I'll eventually convert it to a job queue, I'd like to create an 
>>> output-identical implementation first with Catalyst, however it seems like 
>>> I'm getting output buffering when I don't want it.
>>> 
>>> As a very simple test, I've set up apache 2.2, mod_fastcgi 
>>> (FastCgiExternalServer with -flush and without -flush) and a method like 
>>> this:
>>> 
>>> sub test: Local {
>>>   my ($self, $c) = @_;
>>> 
>>>   $c->res->body('');
>>>   $c->response->content_type( 'text/plain; charset=utf-8' );
>>>   $c->finalize_headers;
>>> 
>>>   my $i;
>>>   for($i=1;$i<8;$i++) {
>>>       $c->write("$i: foo bar baz\n");
>>>       sleep(1);
>>>   }
>>> }
>>> 
>>> I see all the data at once in my browser instead of a line every second, 
>>> and with tcpdump, can see that all of the data is coming back in one packet 
>>> and not in 8+ smaller packets like I expect. If I make the string that gets 
>>> passed to write longer, I get several packets, but all at once (and not 
>>> with each iteration through the for loop).
>>> 
>>> Am I missing something obvious? Is there some way to get the behavior I'm 
>>> expecting?

--
Daniel J. Luke                                                                  
+========================================================+                      
  
| *---------------- dl...@geeklair.net ----------------* |                      
    
| *-------------- http://www.geeklair.net -------------* |                      
    
+========================================================+                      
  
|   Opinions expressed are mine and do not necessarily   |                      
    
|          reflect the opinions of my employer.          |                      
    
+========================================================+




_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: Catalyst@lists.scsys.co.uk
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
Dev site: http://dev.catalyst.perl.org/

Reply via email to