PEF-Front-WebSocket
view release on metacpan or search on metacpan
lib/PEF/Front/WebSocket.pm view on Meta::CPAN
$ws;
}
sub start_queue_server {
my $cv = AnyEvent->condvar();
my $server = AnyEvent::Fork->new->require('PEF::Front::WebSocket::QueueServer')->send_arg(
$config{queue_server_address}, $config{queue_server_port},
$config{queue_no_client_expiration}, $config{queue_message_expiration},
encode_cbor($config{queue_reload_message})
)->run(
'PEF::Front::WebSocket::QueueServer::run',
sub {
$server_slave = $_[0];
$cv->send;
}
);
$cv->recv;
Coro::AnyEvent::readable $server_slave; # block until child is ready
read($server_slave, my $buf, 1);
}
1;
__END__
=head1 NAME
PEF::Front::WebSocket - WebSocket framework for PEF::Front
=head1 SYNOPSIS
# startup.pl
use PEF::Front::Websocket;
# usual startup stuff...
# $PROJECT_DIR/app/WSTest/WebSocket/Echo.pm
package WSTest::WebSocket::Echo;
sub on_message {
my ($self, $message) = @_;
$self->send($message);
}
1;
=head1 DESCRIPTION
This module makes WebSockets really easy. Every kind of WebSocket
is in its own module. Default routing scheme is C</ws$WebSocketClass>.
WebSocket handlers are located in C<$PROJECT_DIR/app/$MyAPP/WebSocket>.
=head2 Prerequisites
This module requires L<Coro>, L<AnyEvent> and L<PSGI> server that must
meet the following requirements.
=over
=item *
C<psgi.streaming> environment is true.
=item *
C<psgi.nonblocking> environment is true.
=item *
C<psgix.io> environment holds a valid raw IO socket object. See L<PSGI::Extensions>.
=back
L<uwsgi|https://uwsgi-docs.readthedocs.io/en/latest/PSGIquickstart.html>
version 2.0.14+ meets all of them with C<psgi-enable-psgix-io = true>.
=head1 WEBSOCKET INTERFACE METHODS
=head2 on_message($message, $type)
A subroutine that is called on new message from client.
=head2 on_drain()
A subroutine that is called when there's nothing to send to
client after some successful send.
=head2 on_open()
A subroutine that is called each time it establishes a new
WebSocket connection to a client.
=head2 on_error($message)
A subroutine that is called when some error
happens while processing a request.
=head2 on_close()
A subroutine that is called on WebSocket close event.
=head2 no_compression()
When defined and true then no compression will be used even when it
supported by browser and server.
=head1 INHERITED METHODS
Every WebSocket class is derived from C<PEF::Front::Websocket::Base>
which is derived from C<PEF::Front::Websocket::Interface>. Even when you don't
derive your class from C<PEF::Front::Websocket::Base> explicitly,
this class will be added automatically to hierarchy.
=head2 send($buffer[, $type])
Sends $buffer to client. By default $type is 'text'.
=head2 close()
Closes WebSocket.
=head2 is_defunct()
( run in 0.741 second using v1.01-cache-2.11-cpan-140bd7fdf52 )