Perl: Nginx
Alexandr Gomoliako
zzz на zzz.org.ua
Ср Дек 28 15:16:52 UTC 2011
On 12/28/11, Dmitry E. Oboukhov <unera at uvw.ru> wrote:
> ngx_connector "1.2.3.4", 80, 15, sub {
>
> };
> ngx_connector "1.2.3.3", 80, 15, sub {
>
> };
> ngx_connector "1.2.3.5", 80, 15, sub {
>
> };
> в одном из них выясняется что два других нам уже не нужны (если они
> еще не выполнились). Вопрос как остановить процесс установления
> коннекта?
Внутри:
ngx_connector "1.2.3.5", 80, 15, sub {
return NGX_CLOSE if $someone_already_responded;
...
};
Этого должно быть достаточно, подключение может происходить успешно,
но возвращать ошибку сразу при попытке отправить данные или получить.
Т.е. все равно нужно ждать дольше.
http://zzzcpan.github.com/nginx-perl/Nginx.html#FLOW_CONTROL
> Или удалить процесс ngx_reader с сокета (и возможно заменить его
> другим)?
Можно переопределять сколько угодно раз, но только явно:
ngx_reader $c, .. sub {
...
ngx_reader $c, .. sub {
...
};
return NGX_READ;
};
Т.е. весь flow будет выстроен в лесенку.
Но лесенка будет маленькая, т.к. ими можно управлять:
my $min = 10;
my $max = 10;
my $timeout = 15;
my $buf;
ngx_reader $c, $buf, $min, $max, $timeout, sub {
if ($something) {
$min = 50;
$max = 100;
$timeout = 5;
return NGX_READ;
}
...
};
> и что такое $c? обычный handler? то есть можно ли этим функциям
> подсовывать сокеты, которые открыты из perl'ового кода? Этот вопрос
> как-то не раскрыт остался
Это не сокет, это указатель на ngx_connection_t, который хранит в себе
все остальное.
Подробная информация о списке рассылки nginx-ru