El POE o Perl Object Environment es una librería de módulos escrita en Perl por Rocco Caputo y otros. Originalmente fue desarrollada como el núcleo de un entorno de ejecución y servidor de objetos persistentes. Evolucionó en un framework de propósito general para multitarea y networking, abarcando y proveyendo una interfaz consistente para otros bucles de eventos tales como Event y los toolkits Tk y Gtk.
Capas de abstracción: Arquitectura POE
POE puede ser pensado como un pequeño sistema operativo modular. Uno o más programas o instancias POE pueden correr juntas en forma concurrente y son generalmente muy adecuadas para multitarea colaborativa. El paquete POE consiste en abstracciones y namespaces que guian el futuro desarrollo de POE en una convención abierta-cerrada al estilo CPAN.
La capa de evento
La arquitectura informal consiste en un conjunto de capas con un kernel de fondo. Este pequeño kernel representa la capa de eventos, los cuales operan como el loop principal de cada instancia POE que está corriendo. La primera llamada es al "despachador de eventos" - POE::Kernel.
La capa I/O
El próximo requerimiento del Kernel es para los manejadores de Input-Output que existen en una sola capa de I/O llamada Wheels. Wheels inicia acciones, maneja los resultados de eventos de bajo nivel y produce eventos de alto nivel para las sesiones que los usan. Wheels es construido como un conjunto uniforme de abstracciones - POE::Wheel, que se sitúa por encima del Kernel. Hay siete Wheels en la distribución base de POE que son altamente especializados y bien definidos.
La capa de archivos
Los manejadores que realmente trabajan leyendo y escribiendo archivos. Se construyen de acuerdo a definiciones menos abstractas contenidas en el módulo POE::Driver.
Componentes POE
Varios paquetes más grandes han sido escritos en POE de acuerdo a la documentación POE::Component. Estos módulos son manejadores de eventos, la mayoría de los cuales son pequeños demonios que proveen servicios a paquetes más grandes a los que pertenecen. Algunos facilitan comunicaciones de alto nivel entre módulos, especialmente a aplicaciones que necesitan mantener independencia del resto de la distribución Perl.
En general los componentes POE son procedimientos de alto nivel que realizan grandes tareas. Por ejemplo:
- Component::Server::TCP - un servlet TCP de propósito especial
- Component::Client::TCP - un cliente TCP POE-aware
- POE::Component::IRC - un cliente IRC con casi todas sus funcionalidades
- POE::Component::Server::IRC - un servidor IRC bajo desarrollo
- POE::Component::UserBase - un servlet para persistencia de datos y autenticación de usuarios
Los componentes POE tienden a ser librerías altamente reusables que manejan tareas tediosas, liberando a los programadores para que se enfoquen en hacer cosas más interesantes.