Full-featured perl support for nginx.
Nginx-perl completes original embedded perl with asynchronous capabilities and a few useful functions.
nginx-perl-1.8.1.10.tar.gz 807 K
nginx-perl-1.2.9.7.tar.gz 707 K
CHANGES.perl (nginx-perl)
CHANGES (nginx)
use Nginx;
# nginx's asynchronous resolver
# "resolver 1.2.3.4;" in nginx-perl.conf
ngx_resolver "www.google.com", 15, sub {
my (@IPs) = @_;
if ($!) {
my ($errcode, $errstr) = @_;
ngx_log_error $!, "Cannot resolve google's IP: $errstr";
}
};
# timer
ngx_timer 5, 0, sub {
ngx_log_notice 0, "5 seconds gone";
};
# asynchronous connections
# with explicit flow control
ngx_connector "1.2.3.4", 80, 15, sub {
if ($!) {
ngx_log_error $!, "Connect error: $!";
return NGX_CLOSE;
}
my $c = shift; # connection
my $wbuf = "GET /\x0d\x0a";
my $rbuf;
ngx_writer $c, $wbuf, 15, sub {
if ($!) {
ngx_log_error $!, "Write error: $!";
return NGX_CLOSE;
}
return NGX_READ;
};
ngx_reader $c, $rbuf, 0, 0, 15, sub {
if ($! && $! != NGX_EOF) {
ngx_log_error $!, "Read error: $!";
return NGX_CLOSE;
}
if ($! == NGX_EOF) {
ngx_log_info 0, "response length: " . length ($rbuf);
return NGX_CLOSE;
}
return NGX_READ; # no errors - read again
};
return NGX_WRITE; # what to do on connect
};
# SSL handshake
ngx_connector "1.2.3.4", 80, 15, sub {
...
my $c = shift;
ngx_ssl_handshaker $c, 15, sub {
...
ngx_writer $c, $wbuf, 15, sub {
...
};
ngx_reader $c, $rbuf, 0, 0, 15, sub {
...
};
return NGX_WRITE;
};
return NGX_SSL_HANDSHAKE;
};
# asynchronous response
# via HTTP API
sub handler {
my ($r) = shift;
$r->main_count_inc;
ngx_resolver "www.google.com", 15, sub {
$r->send_http_header ('text/html');
unless ($!) {
lcoal $, = ', ';
$r->print ("OK, @_\n");
} else {
$r->print ("FAILED, $_[1]\n");
}
$r->send_special (NGX_HTTP_LAST);
$r->finalize_request (NGX_OK);
};
return NGX_DONE;
}
# and more...
© 2012 Alexandr Gomoliako