ReactPHP una biblioteca interesante de PHP
Hoy veremos una introducción a una biblioteca más que interesante para PHP llamada ReactPHP esta es una biblioteca de bajo nivel basada en eventos y non-blocking I/O que nos permite:
- Abstracción de flujos (streams)
- Resolvedor de DNS asíncrono
- Cliente/servidor de red
- Cliente/servidor HTTP
- Interacción con procesos
Algunos Conceptos a entender
Ya por sí mismo aquí tenemos muchos conceptos a entender, no de por hecho de que por ya haberlos escuchado antes sabe de qué tratan ciertos temas
Non-blocking I/O
El término Non-blocking I/O refiere a una técnica donde un programa no espera a que una operación de input o un output termine para continuar con otra tarea. Esta técnica nos puede resultar útil para cualquier aplicación que necesite manejar una cantidad de conexiones en conjunto y poder responder incluso esperando por datos externos.
Por ejemplo, un en un chat no vamos a estar esperando que alguien te escriba para poder escribir ni tampoco sería buena idea estar chequeando, si escribió alguien lo mejor sería utilizar un websocket bidireccional el cual utilizara un socket address.
Streams
Los streams en ReactPHP te permiten procesar eficientemente grandes cantidades de datos (como la descarga de un archivo de varios gigabytes) en pequeños fragmentos sin tener que almacenar todo en la memoria de una vez.
No se si esta sea una buena analogía, pero podemos decir que los stream de reactPHP es como cuando mandamos un archivo grande por red que se segmenta y mandan por paquetes
Resolvedor de DNS asíncrono
esto puede ser bastante bueno, piensa que tu web talvez necesite hacer consulta a otra web pero también debe continuar asíncronamente con lo que esté haciendo.
Cliente/servidor de red
Ofrece un conjunto completo de herramientas para construir servidores de red en PHP. Además de manejar clientes de red asincrónicos.
Por ejemplo: Puedes crear clientes de red que pueden enviar solicitudes a servidores remotos de manera asincrónica.
Principales protocolos admitidos: HTTP, WebSockets, TCP, UDP, DNS, protocolos de red personalizados utilizando sockets.
Cliente/servidor HTTP
En reactPHP puedes crear clientes servidor de HTTP, por tanto, puedes tener tu página online sin tener que depender de Apache o Nginx, de hecho de esto se da un ejemplo en la introducción de la página oficial:
<?php // $ composer require react/http react/socket # install example using Composer // $ php example.php # run example on command line, requires no additional web server require __DIR__ . '/vendor/autoload.php'; $http = new React\Http\HttpServer(function (Psr\Http\Message\ServerRequestInterface $request) { return React\Http\Message\Response::plaintext( "Hello World!\n" ); }); $socket = new React\Socket\SocketServer('127.0.0.1:8080'); $http->listen($socket); echo "Server running at http://127.0.0.1:8080" . PHP_EOL;
Sobre como poner up el servidor y bajarlo cuando lo necesitemos ni idea, supongo que sera con un proceso o con un daemon o demonio como quiera decirles. Sin duda que esto es bastante mas liviano que un servidor apache, aunque este no es tan robusto.
El servidor HTTP de ReactPHP está más dirigido a aplicaciones en tiempo real como puede ser chat, notificaciones y otras.
Interacción con procesos
es la capacidad de comunicarse y coordinar la ejecución de múltiples procesos de manera asincrónica y eficiente.
De esta manera puedes ejecutar procesos, aunque algunos no hayan terminado.
Que puedo hacer con ReactPHP
Ya hemos visto algunas cosas sobre las características de ReactPHP, pero que puedo hacer con este?
- Servidores web
- Aplicaciones de tiempo real
- Microservicios
- Servicios de API RESTful
- Desarrollar proxies y balanceadores de carga
Como ejemplo interesante podemos ver a un chat creado con esta tecnología https://github.com/Ahmard/reactphp-live-chat