Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

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.

Esto no es un servidor de DNS por lo que tengo entendido, en caso de que estés buscando un servidor de DNS tienes a BIND9

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

Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category