(PECL ev >= 0.2.0)
Ev es una clase estática que proporciona acceso al bucle por omsión y a algunas operaciones comunes.
Flags disponibles para crear un bucle:
Ev::FLAG_AUTO
El valor del flag por defecto
Ev::FLAG_NOENV
Si este flag es utilizado (o el programa corre setuid o setgid),
libev
no tendrá en cuenta la variable de entorno
LIBEV_FLAGS
. De otro modo (por defecto),
LIBEV_FLAGS
reemplazará los flags completamente si es definido. Útil para evaluación
de performance y para encontrar errores.
Ev::FLAG_FORKCHECK
Permite que libev verifique un fork en cada iteración, en lugar de llamar a
EvLoop::fork()
manualmente. Esto funciona al llamar a
getpid()
en cada iteración del bucle, y como tal podrá alentizar el bucle de eventos con
numerosas iteraciones, aunque esto no es usualmente notorio. Este flag no puede
ser reemplazado o especificado mediante la variable de entorno
LIBEV_FLAGS.
Ev::FLAG_NOINOTIFY
Cuando este flag es especificado,
libev
no intentará utilizar la API
inotify
para sus watchers
» ev_stat.
El flag puede ser útil para conservar los descriptores de archivo inotify,
ya que de otro modo cada bucle que utilice watchers
ev_stat
consumen un handle
inotify
.
Ev::FLAG_SIGNALFD
Cuando este flag es especificado,
libev
intentará utilizar la API
signalfd
para sus watchers
» ev_signal
(y
» ev_child
). Esta API entrega las señales sincrónicamente, lo que la hace más rápida
y puede permitir obtener los datos de señal encolados.
También puede simplificar el manejo de señales mediante hilos, siempre y cuando
las señales sean bloqueadas apropiadamente en los hilos.
Signalfd
no será utilizado por defecto.
Ev::FLAG_NOSIGMASK
Cuando este flag es especificado,
libev
hará imposible la modificación de la máscara de señal. Esto significa
que será necesario asegurarse que las señales están desbloqueadas antes
de recibirlas.
Este comportamiento es útil para el manejo de señales personalizado, o para manipular señales solamente en hilos específicos.
Flags disponibles para Ev::run() , o EvLoop::run()
Ev::RUN_NOWAIT
Significa que el bucle de eventos buscará nuevos eventos, y manejará aquellos eventos y cualquier otro evento pendiente, pero no esperará ni bloqueará el proceso en caso de que no haya eventos, retornando luego de una iteración del bucle. Esto es útil para obtener nuevos eventos mientras se realizan cálculos costosos, manteniendo el programa funcionando.
Ev::RUN_ONCE
Significa que el bucle de eventos buscará nuevos eventos (esperando
si es necesario) y manejará aquellos eventos, y cualquier otro evento
pendiente. Bloqueará el proceso hasta que al menos un evento esté
disponible (que podría ser un evento interno a libev
,
por lo que no hay garantía de que un callback registrado por el usuario
sea llamado), y retornará luego de una iteración del bucle.
Flags disponibles para Ev::stop() , o EvLoop::stop()
Ev::BREAK_CANCEL
Cancelar la operación break.
Ev::BREAK_ONE
Hace que la llamada interior Ev::run() (o EvLoop::run() ) retorne.
Ev::BREAK_ALL
Hace que todas las llamadas Ev::run() (o EvLoop::run() ) retornen.
Prioridades Watcher:
Ev::MINPRI
Prioridad mínima disponible.
Ev::MAXPRI
Prioridad máxima disponible.
Máscaras de Bit de los eventos (recibidos):
Ev::READ
El descriptor de archivo en el watcher EvIo se ha vuelto disponible.
Ev::WRITE
El descriptor de archivo en el watcher EvIo se ha vuelto modificable.
Ev::TIMER
El watcher EvTimer ha agotado su tiempo.
Ev::PERIODIC
El watcher EvPeriodic ha agotado su tiempo.
Ev::SIGNAL
Una señal especificada en EvSignal::__construct() ha sido recibida.
Ev::CHILD
El
pid
especificado en
EvChild::__construct()
ha recibido una alteración de estado.
Ev::STAT
El path especificado en el watcher EvStat ha modificado sus atributos.
Ev::IDLE
El watcher EvIdle trabaja cuando no hay nada que hacer con otros watchers.
Ev::PREPARE
Todos los watchers EvPrepare son invocados justo antes de que Ev::run() comience. Así, los watchers EvPrepare son los últimos en ser invocados antes de que el bucle de eventos duerma, o busque nuevos eventos.
Ev::CHECK
Todos los watchers EvCheck son encolados justo luego de que Ev::run() haya obtenido los nuevos eventos, pero antes de que encole cualquier callback para los eventos recibidos. Así, los watchers EvCheck serán invocados antes que cualquier otro watcher de la misma o menor prioridad dentro de la iteración del bucle de eventos.
Ev::EMBED
El bucle embebido especificado en el watcher EvEmbed necesita atención.
Ev::CUSTOM
Nunca enviado (o utilizado) por
libev
, pero puede
ser libremente utilizado por los usuarios de
libev
para enviar señales a watchers (por ejemplo
a través de
EvWatcher::feed()
).
Ev::ERROR
Un error no especificado ha ocurrido, y el watcher se ha detenido. Esto
puede ocurrir ya sea porque el watcher no haya sido inicializado apropiadamente
debido a que
libev
ha agotado la memoria disponible, porque un descriptor de archivo se encontraba ya cerrado,
o por cualquier otro problema.
Libev
considera estos errores como errores de aplicación. Véase también
» ANATOMY
OF A WATCHER
Flags de Backend:
Ev::BACKEND_SELECT
Backend select(2)
Ev::BACKEND_POLL
Backend poll(2)
Ev::BACKEND_EPOLL
Backend específico a Linux
epoll(7)
tanto para kernels anteriores o posteriores a la
versión 2.6.9
Ev::BACKEND_KQUEUE
Backend kqueue
utilizado en la mayoría de los sistemas BSD.
El watcher EvEmbed
puede ser utilizado para embeber un bucle (con e backend
kqueue
)
dentro de otro. Por ejemplo, uno puede intentar crear un bucle de
eventos con el backend
kqueue
y utilizarlo solamente por sus sockets.
Ev::BACKEND_DEVPOLL
Backend Solaris 8. Aún no implementado.
Ev::BACKEND_PORT
Mecanismo de puerto Solaris 10 con buena escalabilidad.
Ev::BACKEND_ALL
Intentar todos los backends (incluso los corrompidos). No es
recomendado utilizar este flag explícitamente. En su lugar deberían
utilizarse operaciones Bitwise (por ejemplo
Ev::BACKEND_ALL
& ~
Ev::BACKEND_KQUEUE
). Utiliza
Ev::recommendedBackends()
, o no especifiques ningún backend en especial.
Ev::BACKEND_MASK
No es un backend, sino una máscara que permite seleccionar todos
los bits de backends desde el valor
flags
para sacar de la máscara cualquier backend (por ejemplo cuando se modifica
la variable de entorno
LIBEV_FLAGS
).
Nota:
Durante la fase de inicialización del módulo,
Ev
registtra para el bucle por defecto una llamada a » ev_loop_fork a través depthread_atfork
(si se encuentra disponible).
Nota:
Existen métodos que ofrecen acceso al bucle de eventos por defecto en la clase Ev (por ejemplo Ev::iteration() , Ev::depth() etc.) Para bucles personalizados (creados con EvLoop::__construct() ) estos valores pueden ser accedidos a través de propiedades y métodos correspondientes de la clase EvLoop .
La instancia del bucle de eventos por defecto puede ser obtenida a través del método EvLoop::defaultLoop() .