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

Reply via email to