URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 7243
[ Назад ]

Исходное сообщение
"FastCGI + nginx + autoflush"

Отправлено localhorst , 23-Май-11 12:37 
Столкнулся с непонятностью: демон на perl при обращении к нему через nginx выводит все и сразу и только после полной отработки скрипта. А должен и хочется, чтобы выводил построчно по мере генерации.
Код самого скрипта:

~~~~~~~~~~~
#!/usr/bin/perl

use strict;
use warnings;
use FCGI;
use Proc::Daemon;
use Proc::PID::File;

$| = 1;

Proc::Daemon::Init();

if (Proc::PID::File->running()) {
    print "Already running\n";
    exit 0;
}

my $socket = FCGI::OpenSocket(":9888", 5);

my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);

while($request->Accept() >= 0) {
    print "Content-Type: text/html\r\n\r\n";
    print "Autoflush is currently ".($|?"on":"off").".
\n";
    for ( 1..5 ) {
         print "Value is $_.
\n";
         sleep 1;
    }
    print "Autoflush is currently ".($|?"on":"off").".
\n";
};

~~~~~~~~~~~


В конфиге nginx:
  location ~* ^/ts/? {
      fastcgi_pass localhost:9888;
  }

gzip отключен.

Подскажите, плз, ибо печаль. Должно же работать...


Содержание

Сообщения в этом обсуждении
"FastCGI + nginx + autoflush"
Отправлено cryo , 23-Май-11 13:27 
Попробуй еще добавить:

> my $socket = FCGI::OpenSocket(":9888", 5);

$socket->autoflush();

> my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);


"FastCGI + nginx + autoflush"
Отправлено localhorst , 23-Май-11 13:37 
> Попробуй еще добавить:
>> my $socket = FCGI::OpenSocket(":9888", 5);
>  $socket->autoflush();
>> my $request = FCGI::Request(\*STDIN, \*STDOUT, \*STDERR, \%ENV, $socket);

Пробовал. Не запускается в принципе. Ошибок не выводит (ибо не должен вроде вообще ничего выводить), ни в какие логи ничего не пишет.


"FastCGI + nginx + autoflush"
Отправлено PavelR , 23-Май-11 21:49 
>[оверквотинг удален]
>     print "Autoflush is currently ".($|?"on":"off").".
> \n";
> };
> ~~~~~~~~~~~
> В конфиге nginx:
>   location ~* ^/ts/? {
>       fastcgi_pass localhost:9888;
>   }
> gzip отключен.
> Подскажите, плз, ибо печаль. Должно же работать...

не будет работать.
буферизация на нжынксе отключаема только для http-проксирования.