NAME
Mojo::Reactor::EV - Low-level event reactor with libev support
SYNOPSIS
use
Mojo::Reactor::EV;
# Watch if handle becomes readable or writable
my
$reactor
= Mojo::Reactor::EV->new;
$reactor
->io(
$first
=>
sub
(
$reactor
,
$writable
) {
say
$writable
?
'First handle is writable'
:
'First handle is readable'
;
});
# Change to watching only if handle becomes writable
$reactor
->watch(
$first
, 0, 1);
# Turn file descriptor into handle and watch if it becomes readable
my
$second
= IO::Handle->new_from_fd(
$fd
,
'r'
);
$reactor
->io(
$second
=>
sub
(
$reactor
,
$writable
) {
say
$writable
?
'Second handle is writable'
:
'Second handle is readable'
;
})->watch(
$second
, 1, 0);
# Add a timer
$reactor
->timer(
15
=>
sub
(
$reactor
) {
$reactor
->remove(
$first
);
$reactor
->remove(
$second
);
say
'Timeout!'
;
});
# Start reactor if necessary
$reactor
->start
unless
$reactor
->is_running;
DESCRIPTION
Mojo::Reactor::EV is a low-level event reactor based on EV (4.32+).
EVENTS
Mojo::Reactor::EV inherits all events from Mojo::Reactor::Poll.
METHODS
Mojo::Reactor::EV inherits all methods from Mojo::Reactor::Poll and implements the following new ones.
again
$reactor
->again(
$id
);
$reactor
->again(
$id
, 0.5);
Restart timer and optionally change the invocation time. Note that this method requires an active timer.
new
my
$reactor
= Mojo::Reactor::EV->new;
Construct a new Mojo::Reactor::EV object.
one_tick
$reactor
->one_tick;
Run reactor until an event occurs or no events are being watched anymore.
# Don't block longer than 0.5 seconds
my
$id
=
$reactor
->timer(0.
5
=>
sub
{});
$reactor
->one_tick;
$reactor
->remove(
$id
);
recurring
my
$id
=
$reactor
->recurring(0.
25
=>
sub
{...});
Create a new recurring timer, invoking the callback repeatedly after a given amount of time in seconds.
start
$reactor
->start;
Start watching for I/O and timer events, this will block until "stop" is called or no events are being watched anymore.
# Start reactor only if it is not running already
$reactor
->start
unless
$reactor
->is_running;
stop
$reactor
->stop;
Stop watching for I/O and timer events.
timer
my
$id
=
$reactor
->timer(0.
5
=>
sub
{...});
Create a new timer, invoking the callback after a given amount of time in seconds.
watch
$reactor
=
$reactor
->watch(
$handle
,
$readable
,
$writable
);
Change I/O events to watch handle for with true and false values. Note that this method requires an active I/O watcher.
# Watch only for readable events
$reactor
->watch(
$handle
, 1, 0);
# Watch only for writable events
$reactor
->watch(
$handle
, 0, 1);
# Watch for readable and writable events
$reactor
->watch(
$handle
, 1, 1);
# Pause watching for events
$reactor
->watch(
$handle
, 0, 0);