Re: PIPE and mod_perl2

Torsten Förtsch <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.