Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: ModPerl: ModPerl

PIPE and mod_perl2

 

 

ModPerl modperl RSS feed   Index | Next | Previous | View Threaded


user783 at gmail

Dec 4, 2011, 11:19 PM

Post #1 of 5 (424 views)
Permalink
PIPE and mod_perl2

Hello.

Trying to write a program for mod_perl2 that gradually display its
output such as output from "ping" (output during PIPE execution).

For example
http://www.websitepulse.com/help/testreq.php?host=www.ya.ru&location=9&type=1&singletestpage=ping-test&pass=&ttref=http%3A%2F%2Fwww.websitepulse.com%2F&__=1323068838832

At the moment I was able display all output at once. That completely
unacceptable for this type of program

my $ping = '/bin/ping';
my $count = '-c 10';
open (PIPE, "$ping $count $param |");
if (!<PIPE>) {
$r->print("Error: can't open the pipe $!");
return OK;
};

while (<PIPE>) {
$r->write($_); # tried $r->print and $r->puts......with
the same result
$r->write('<br />');
};

close (PIPE);


Please if anyone know how possible gradually display output in
mod_perl2 help me........


torsten.foertsch at gmx

Dec 5, 2011, 1:26 AM

Post #2 of 5 (399 views)
Permalink
Re: PIPE and mod_perl2 [In reply to]

On Monday, 05 December 2011 11:19:51 Denis Spichkin wrote:
> Trying to write a program for mod_perl2 that gradually display its
> output such as output from "ping" (output during PIPE execution).
>
> For example
> http://www.websitepulse.com/help/testreq.php?host=www.ya.ru&location=9&type=
> 1&singletestpage=ping-test&pass=&ttref=http%3A%2F%2Fwww.websitepulse.com%2F&
> __=1323068838832
>
> At the moment I was able display all output at once. That completely
> unacceptable for this type of program
>
> my $ping = '/bin/ping';
> my $count = '-c 10';
> open (PIPE, "$ping $count $param |");
> if (!<PIPE>) {
> $r->print("Error: can't open the pipe $!");
> return OK;
> };
>
> while (<PIPE>) {
> $r->write($_); # tried $r->print and $r->puts......with
> the same result
> $r->write('<br />');
> };
>
> close (PIPE);
>
>
> Please if anyone know how possible gradually display output in
> mod_perl2 help me........

I believe your program works as expected. The rest is a browser issue. Try
this one on the command line:

perl -MIO::Socket::INET -le '
my $s=IO::Socket::INET->new($ARGV[0].":80");
$s->print("GET $ARGV[1] HTTP/1.0\r\nHost: $ARGV[0]\r\n\r\n");
while(<$s>) {
print time."\t".$_;
}' www.websitepulse.com
'/help/testreq.php?host=www.ya.ru&location=9&type=1&singletestpage=ping-
test&pass=&ttref=http%3A%2F%2Fwww.websitepulse.com%2F&__=1323068838832'

Here I get the output:

1323076533 HTTP/1.1 200 OK

...

1323076533 </b></td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
www.yandex.ru (77.88.21.3): icmp_seq=0 ttl=56 time=158 ms

1323076534 </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
www.yandex.ru (77.88.21.3): icmp_seq=1 ttl=56 time=158 ms

1323076535 </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
www.yandex.ru (77.88.21.3): icmp_seq=2 ttl=56 time=158 ms

1323076536 </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
www.yandex.ru (77.88.21.3): icmp_seq=3 ttl=56 time=158 ms

1323076537 </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
www.yandex.ru (77.88.21.3): icmp_seq=4 ttl=56 time=158 ms

1323076537 </td></tr><tr bgcolor=#F5F5F5><td nowrap>

You see the first few lines come in at the same time. Then between each of the
ping output lines is an interval of 1 sec.

The reason why you don't see it immediately in the browser window is the
browser rendering.

Have a look also at:

http://foertsch.name/ModPerl-Tricks/ServerPush.shtml
http://foertsch.name/ModPerl-Tricks/req-hand-over.shtml

Torsten Förtsch

--
Need professional modperl support? Hire me! (http://foertsch.name)

Like fantasy? http://kabatinte.net


user783 at gmail

Dec 5, 2011, 5:39 AM

Post #3 of 5 (397 views)
Permalink
Re: PIPE and mod_perl2 [In reply to]

Thank you for your replay

I think I have find the way of solution of my problem
the difference between situation when output is shown gradually and
when output is shown at once
is:
when: Transfer-Encoding chunked
and unset Content-Length
the output show immediately without delay

and when:
Transfer-Encoding: is absent
and Content-Length is set for axample Content-Length 280
output will be show only after load all page (size 280 )

so now I need find out how generate page with out Content-Length in mod_perl


2011/12/5 Torsten Förtsch <torsten.foertsch [at] gmx>:
> On Monday, 05 December 2011 11:19:51 Denis Spichkin wrote:
>> Trying to write a program for mod_perl2  that gradually display its
>> output such as output from "ping" (output during PIPE execution).
>>
>> For example
>> http://www.websitepulse.com/help/testreq.php?host=www.ya.ru&location=9&type=
>> 1&singletestpage=ping-test&pass=&ttref=http%3A%2F%2Fwww.websitepulse.com%2F&
>> __=1323068838832
>>
>> At the moment I was able display all output at once.  That completely
>> unacceptable for this type of program
>>
>>         my $ping = '/bin/ping';
>>         my $count = '-c 10';
>>         open (PIPE, "$ping $count $param |");
>>         if (!<PIPE>) {
>>                 $r->print("Error: can't open the pipe $!");
>>                 return OK;
>>                 };
>>
>>         while (<PIPE>) {
>>             $r->write($_); # tried $r->print and $r->puts......with
>> the same result
>>             $r->write('<br />');
>>             };
>>
>>         close (PIPE);
>>
>>
>> Please if anyone know how possible gradually display output in
>> mod_perl2 help me........
>
> I believe your program works as expected. The rest is a browser issue. Try
> this one on the command line:
>
> perl -MIO::Socket::INET -le '
>  my $s=IO::Socket::INET->new($ARGV[0].":80");
>  $s->print("GET $ARGV[1] HTTP/1.0\r\nHost: $ARGV[0]\r\n\r\n");
>  while(<$s>) {
>    print time."\t".$_;
>  }' www.websitepulse.com
> '/help/testreq.php?host=www.ya.ru&location=9&type=1&singletestpage=ping-
> test&pass=&ttref=http%3A%2F%2Fwww.websitepulse.com%2F&__=1323068838832'
>
> Here I get the output:
>
> 1323076533      HTTP/1.1 200 OK
>
> ...
>
> 1323076533      </b></td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
> www.yandex.ru (77.88.21.3): icmp_seq=0 ttl=56 time=158 ms
>
> 1323076534      </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
> www.yandex.ru (77.88.21.3): icmp_seq=1 ttl=56 time=158 ms
>
> 1323076535      </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
> www.yandex.ru (77.88.21.3): icmp_seq=2 ttl=56 time=158 ms
>
> 1323076536      </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
> www.yandex.ru (77.88.21.3): icmp_seq=3 ttl=56 time=158 ms
>
> 1323076537      </td></tr><tr bgcolor=#F5F5F5><td nowrap>64 bytes from
> www.yandex.ru (77.88.21.3): icmp_seq=4 ttl=56 time=158 ms
>
> 1323076537      </td></tr><tr bgcolor=#F5F5F5><td nowrap>
>
> You see the first few lines come in at the same time. Then between each of the
> ping output lines is an interval of 1 sec.
>
> The reason why you don't see it immediately in the browser window is the
> browser rendering.
>
> Have a look also at:
>
> http://foertsch.name/ModPerl-Tricks/ServerPush.shtml
> http://foertsch.name/ModPerl-Tricks/req-hand-over.shtml
>
> Torsten Förtsch
>
> --
> Need professional modperl support? Hire me! (http://foertsch.name)
>
> Like fantasy? http://kabatinte.net
>


david at dbooth

Dec 5, 2011, 6:54 AM

Post #4 of 5 (398 views)
Permalink
Re: PIPE and mod_perl2 [In reply to]

On Mon, 2011-12-05 at 17:39 +0400, Denis Spichkin wrote:
[ . . . ]
> so now I need find out how generate page with out Content-Length in mod_perl

I believe you need to force Apache to flush the headers. Otherwise it
will try to compute and add the Content-Length header for you. See
http://perl.apache.org/docs/2.0/user/handlers/http.html#item_The_special_case_of__code_Content_Length__0__code_


--
David Booth, Ph.D.
http://dbooth.org/

Opinions expressed herein are those of the author and do not necessarily
reflect those of his employer.


user783 at gmail

Dec 5, 2011, 11:23 AM

Post #5 of 5 (401 views)
Permalink
Re: PIPE and mod_perl2 [In reply to]

Thank you for your replay
yes, flush the headers is really work but only in IE (in Firefox it
doesn't work)
and its work only in cycle

while (<PIPE>) {
$r->rflush;
$r->print( $_ );
};

when i use $r->rflush only one time (before cycle ) it doesn't work.
(it set Transfer-Encoding chunked but the page is show entirely at
once)

rflush help me set follow header

Date Mon, 05 Dec 2011 19:07:48 GMT
Server Apache/2.2.16 (Ubuntu)
Vary Accept-Encoding
Content-Encoding gzip
Connection close
Transfer-Encoding chunked
Content-Type text/html

but I completely don't undestand what difference between IE and
Firefox in this case.



2011/12/5 David Booth <david [at] dbooth>:
> On Mon, 2011-12-05 at 17:39 +0400, Denis Spichkin wrote:
> [ . . . ]
>> so now I need find out how generate page with out Content-Length in mod_perl
>
> I believe you need to force Apache to flush the headers.  Otherwise it
> will try to compute and add the Content-Length header for you.  See
> http://perl.apache.org/docs/2.0/user/handlers/http.html#item_The_special_case_of__code_Content_Length__0__code_
>
>
> --
> David Booth, Ph.D.
> http://dbooth.org/
>
> Opinions expressed herein are those of the author and do not necessarily
> reflect those of his employer.
>

ModPerl modperl RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.