Event-driven, non-blocking I/O with PHP.
Reactor Nuclear escrito en PHP
Presentación para @MedellinPHP
2014-02-20
Alvaro José Agámez Licha, trabajo como Software Engineer en Craftinc.
Craftinc es una empresa de desarrollo de software donde creamos productos digitales eficaces. Somos expertos en UX/UI y desarrollo web. Orgullosamente basados en Medellín, Colombia.
Novio perezoso amoroso.
Programador por pasión, gamer, geek, amante de todo lo relacionado con la tecnología.
Consumidor de tutoriales, tv, comics, manga, anime, cerveza, helado, changelogs y documentos sobre nuevas tecnologías.
Eterno inconforme, siempre pensando en nuevas formas de hacer mejor las cosas y siempre trabajando en alguna idea, así sea reinventando una que otra rueda.
React es una librería de bajo nivel para la programación orientada a eventos en PHP. En su núcleo es un bucle de eventos, además de que proporciona utilidades de bajo nivel, tales como: abstracción de Streams, resolución asíncrona de dns, cliente/servidor de red, cliente/servidor http, interacción con procesos. Bibliotecas de terceros pueden usar estos componentes para crear clientes/servidores de red asíncronos y mucho más.
¿Por qué ReactPHP?
Event-driven non-blocking I/O in PHP.
¿Event-driven?
Un paradigma de programación donde la ejecución de código es desencadenada por eventos.
¿Non-blocking?
Un programa puede trabajar en otra tarea mientras espera por las operaciones de entrada/salida.
¿Qué hace React que necesitemos?
Asincronismo
No bloqueante
Eventos
Input / Output
¿Por qué necesitamos React?
Node JS
React se instala a través de Composer, así que lo primero que debemos hacer es instalar Composer si no lo tenemos instalado:
Una vez que tenemos instalado Composer, React se instala muy fácilmente.
La lista completa de paquetes que contiene React la pueden encontrar en Packagist.
Este simple servidor web escrito en React responde con "Hello World" a cada solicitud.
require 'vendor/autoload.php';
$app = function ($request, $response) {
$response->writeHead(200, array('Content-Type' => 'text/plain'));
$response->end("Hello World\n");
};
$loop = React\EventLoop\Factory::create();
$socket = new React\Socket\Server($loop);
$http = new React\Http\Server($socket, $loop);
$http->on('request', $app);
echo "Server running at http://127.0.0.1:1337\n";
$socket->listen(1337);
$loop->run();
Gracias a Phil Sturgeon podemos disfrutar de un correcto benchmark midiendo el desempeño de React y Node.js.
Básicamente lo que nos dice este benchmark es que React y Node.js están virtualmente empatados en desempeño, por lo menos para el tipo de operación que se probó.