Características de Workerman

1. Desarrollo en PHP puro

Las aplicaciones desarrolladas con Workerman pueden funcionar de forma independiente sin depender de contenedores como php-fpm, apache o nginx. Esto facilita mucho a los desarrolladores de PHP el desarrollo, implementación y depuración de aplicaciones.

2. Soporte para PHP multiproceso

Para aprovechar al máximo el rendimiento de múltiples CPUs en el servidor, Workerman soporta de manera predeterminada múltiples procesos y tareas. Workerman inicia un proceso principal y varios procesos secundarios para ofrecer servicios, el proceso principal se encarga de supervisar los procesos secundarios, mientras que los procesos secundarios escuchan conexiones de red y envían y procesan datos de forma independiente. Este modelo de proceso simple hace que Workerman sea más estable y eficiente.

3. Soporte para TCP y UDP

Workerman soporta dos protocolos de la capa de transporte: TCP y UDP. Simplemente cambiando un atributo se puede modificar el protocolo de transporte, sin necesidad de cambiar el código de negocio.

4. Soporte para conexiones largas

A menudo es necesario que las aplicaciones PHP mantengan conexiones largas con el cliente, como chatrooms o juegos. Sin embargo, los contenedores PHP tradicionales (apache, nginx, php-fpm) tienen dificultades para lograr esto. Con Workerman, mientras el negocio del servidor no llame activamente a la interfaz para cerrar la conexión, se pueden mantener conexiones largas en PHP. Un solo proceso de Workerman puede soportar miles de conexiones simultáneas, y múltiples procesos pueden soportar decenas de miles e incluso cientos de miles de conexiones simultáneas.

5. Soporte para varios protocolos de capa de aplicación

La interfaz de Workerman soporta varios protocolos de capa de aplicación, incluyendo protocolos personalizados. Cambiar el protocolo en Workerman también es muy sencillo, solo se necesita configurar un campo y el protocolo se cambiará automáticamente, sin necesidad de modificar el código de negocio e incluso se pueden abrir múltiples puertos con diferentes protocolos para satisfacer diferentes necesidades de los clientes.

6. Soporte para alta concurrencia

Workerman soporta la biblioteca de sondeo de eventos Libevent (se requiere instalar la extensión event). Usar Event proporciona un rendimiento excepcional bajo altas concurrencias de conexiones largas. Si no se instala la extensión Event, Workerman utilizará llamadas al sistema relacionadas con Select que vienen integradas en PHP, lo cual también ofrece un rendimiento impresionante.

7. Soporte para reinicio suave del servicio

Cuando es necesario reiniciar un servicio (por ejemplo, al publicar una nueva versión), no deseamos que el proceso que está manejando las solicitudes de los usuarios se termine de inmediato, ni que el momento del reinicio cause fallos en la comunicación con el cliente. Workerman proporciona una funcionalidad de reinicio suave que garantiza que el servicio se actualice sin interrupciones para el cliente.

8. Soporte para detección de actualizaciones de archivos y carga automática

Durante el proceso de desarrollo, deseamos que los cambios en el código tengan efecto de inmediato para poder ver los resultados. Workerman ofrece el componente FileMonitor, que monitorea los archivos; cada vez que hay una actualización, Workerman ejecutará automáticamente un reload para cargar los nuevos archivos y hacerlos efectivos.

9. Soporte para ejecutar procesos secundarios con un usuario específico

Dado que los procesos secundarios son los que realmente manejan las solicitudes de los usuarios, por razones de seguridad no deben tener permisos demasiado altos. Por ello, Workerman permite configurar el usuario con el que se ejecutan los procesos secundarios, haciendo que tu servidor sea más seguro.

10. Soporte para mantener objetos o recursos de forma permanente

Durante la ejecución, Workerman solo analizará y cargará cada archivo PHP una vez y luego permanecerá en memoria. Esto significa que las declaraciones de clases y funciones, el entorno de ejecución de PHP y las tablas de símbolos no se crean y destruyen repetidamente, lo que es completamente diferente al mecanismo de PHP que se ejecuta en contenedores web. En Workerman, los miembros estáticos o las variables globales dentro del ciclo de vida de un proceso se mantienen permanentemente a menos que se destruyan activamente. Esto significa que los objetos o recursos como conexiones se pueden colocar en variables globales o miembros estáticos de clase, permitiendo que todas las solicitudes durante el ciclo de vida del proceso actual las reutilicen. Por ejemplo, si se inicializa una conexión a la base de datos una sola vez dentro de un proceso, todas las solicitudes de ese proceso posterior pueden reutilizar esa conexión a la base de datos, evitando así el proceso de handshake TCP de tres pasos, la verificación de permisos de la base de datos, y el handshake TCP de cuatro pasos al desconectar, mejorando enormemente la eficiencia de la aplicación.

11. Alto rendimiento

Dado que los archivos PHP se leen y analizan una vez desde el disco y luego permanecen en memoria, la próxima vez se utilizarán directamente los opcode en memoria. Esto reduce significativamente las operaciones de E/S del disco y muchos procesos que consumen tiempo en PHP como la inicialización de solicitudes, la creación del entorno de ejecución, el análisis léxico, el análisis sintáctico, la compilación de opcode, el cierre de solicitudes, etc. Además, al no depender de contenedores como nginx o apache, se eliminan los costos de comunicación entre ellos y PHP. Lo más importante es que los recursos pueden permanecer permanentemente, evitando la necesidad de inicializar conexiones a la base de datos, etc., por lo que las aplicaciones desarrolladas con Workerman tienen un rendimiento muy alto.

12. Soporte para HHVM

Soporta la ejecución en la máquina virtual HHVM, lo que puede mejorar el rendimiento de PHP de manera significativa. Especialmente en negocios con cálculos intensivos en CPU, el rendimiento es excepcional. Las pruebas de estrés reales han mostrado que, sin carga de trabajo, Workerman bajo HHVM logra un aumento del 30 al 80% en el rendimiento de la capacidad de red en comparación con correr en Zend PHP 5.6.

13. Soporte para implementaciones distribuidas

14. Soporte para ejecución en modo demonio

15. Soporte para escuchar múltiples puertos

16. Soporte para redirección de entrada y salida estándar