As more of a hack than a necessarily good practice, I've found that sending a newline (in addition to $|=1) sometimes helps. I think the problem here is more that the browser doesn't necessarily render content every single time some data comes in over the socket, but maybe waits for logical looking breakpoints to render. Someone who knows browsers better will probably correct me, but that's what I've found.
Newlines are good because in general (unless you're in a NOBR block, CODE block, etc ) the browser won't display it, but it seems to trigger the browser to do something. Issac Foo Ji-Haw wrote: > Hello Rodger, > > Thanks for the advice. I'm concerned that this sounds like a lot of > search-and-replace for my application. I wonder if there is a cleaner > method that simply toggles off buffering? > > Anyone has any ideas on this? > > Rodger Castle wrote: > >>> If I am not mistaken, modperl tends to cache all output until the >>> script is completed, then it sends out the page. If I want to (for >>> example) print a period (.) back to the browser every second, what >>> do I need to do? I tried $| but it does not work. >>> >> >> >> I fought with this for a while, too. You can use the 'bucket brigade' >> technique. I'm a bit green, so someone with more experience could >> expound more. Here's a snippet: >> >> sub send_response_body >> { >> my ( $r, $data ) = @_; >> my $bb = APR::Brigade->new ( $r->pool, >> $r->connection->bucket_alloc ); >> my $b = APR::Bucket->new ( $data ); >> $bb->insert_tail ($b); >> $r->output_filters->fflush ( $bb ); >> $bb->destroy; >> } >> >> Hope this helps. >> >> Rodger >> >> >>