mirror of
https://github.com/clearlinux/uwsgi.git
synced 2026-09-04 12:41:38 +00:00
78 lines
1.8 KiB
Perl
78 lines
1.8 KiB
Perl
# to run the server
|
|
# uwsgi --plugin psgi,coroae --http-socket :9090 --http-socket-modifier1 5 --coroae 8 --psgi examples/corostream.pl --master
|
|
# to test it
|
|
# curl -D /dev/stdout -N --raw http://localhost:9090/
|
|
|
|
use Coro::AnyEvent;
|
|
use AnyEvent::HTTP;
|
|
|
|
my $signal_handler = sub {
|
|
my $signum = shift;
|
|
print "i am the signal ".$signum."\n" ;
|
|
};
|
|
|
|
my $signal_timer = sub {
|
|
my $signum = shift;
|
|
print "2 seconds elapsed\n";
|
|
};
|
|
|
|
uwsgi::register_signal(17, '', $signal_handler);
|
|
uwsgi::register_signal(30, '', $signal_timer);
|
|
|
|
# raise the signal 30 every 2 seconds
|
|
uwsgi::add_timer(30, 2);
|
|
|
|
sub streamer {
|
|
$responder = shift;
|
|
# generate the headers and start streaming the response
|
|
my $writer = $responder->( [200, ['Content-Type' => 'text/plain']]);
|
|
|
|
$writer->write("Hello, the streaming is starting...\n");
|
|
|
|
for(my $i=0;$i<5;$i++) {
|
|
Coro::AnyEvent::sleep 1;
|
|
$writer->write("[".$i."] one seconds elapsed...\n");
|
|
}
|
|
|
|
$writer->write("let me show you the coroae plugin source taken from github\n\n");
|
|
|
|
# this condvar will allow us to wait for the github response
|
|
my $w = AnyEvent->condvar;
|
|
|
|
my $uwsgi_coroae_src = '';
|
|
|
|
http_get 'https://raw.github.com/unbit/uwsgi/master/plugins/coroae/coroae.c', sub { $uwsgi_coroae_src = $_[0] ; $w->send;};
|
|
|
|
$w->recv;
|
|
|
|
$writer->write($uwsgi_coroae_src);
|
|
|
|
Coro::AnyEvent::sleep 1;
|
|
|
|
$writer->write("now let's raise a uwsgi signal...\n");
|
|
|
|
uwsgi::signal(17);
|
|
|
|
Coro::AnyEvent::sleep 1;
|
|
|
|
$writer->write("another one second elapsed, time to finish.\n");
|
|
|
|
Coro::AnyEvent::sleep 1;
|
|
|
|
$writer->write("Goodbye\n");
|
|
|
|
$writer->close;
|
|
|
|
print "the request ended, but we are still here\n";
|
|
|
|
Coro::AnyEvent::sleep 1;
|
|
|
|
print "another second elapsed, time to end (really)\n";
|
|
}
|
|
|
|
# our PSGI app
|
|
my $app = sub {
|
|
my $env = shift;
|
|
return \&streamer;
|
|
}
|