WebSocket en PHP: creando aplicaciones en tiempo real desde cero

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

WebSocket en PHP: creación de aplicaciones en tiempo real desde cero



Las aplicaciones web modernas requieren una reacción instantánea a las acciones de los usuarios. El protocolo HTTP estándar, que funciona bajo el principio de "solicitud-respuesta", no es adecuado para tareas donde los datos deben actualizarse en tiempo real — chats, notificaciones, cotizaciones bursátiles o juegos en línea. La solución a este problema es WebSocket. En este artículo, analizaremos cómo implementar WebSocket en PHP, crearemos un chat simple y revisaremos las mejores prácticas.



¿Qué es WebSocket y por qué es necesario en PHP?



WebSocket es un protocolo de comunicación que proporciona una conexión bidireccional permanente entre el cliente (navegador) y el servidor. A diferencia de HTTP, una vez establecida la conexión, los datos pueden transmitirse en ambas direcciones en cualquier momento sin solicitudes repetidas. Esto es críticamente importante para aplicaciones en tiempo real.



Tradicionalmente, PHP se considera un lenguaje para lógica del lado del servidor que funciona bajo el esquema "inicio-ejecución-finalización". Sin embargo, con la aparición de bibliotecas asíncronas como Ratchet y ReactPHP, PHP se ha convertido en una herramienta completa para crear servidores WebSocket. Las principales ventajas de usar WebSocket en PHP son:



  • Entrega instantánea de datos — sin demoras por solicitudes HTTP repetidas.
  • Reducción de la carga en el servidor — una sola conexión reemplaza decenas de solicitudes Long Polling.
  • Facilidad de integración — si tu proyecto ya está en PHP, no necesitas cambiar la pila tecnológica.


Instalación y configuración de la biblioteca Ratchet



Para trabajar con WebSocket en PHP, usaremos la biblioteca Ratchet (en conjunto con ReactPHP). La instalación se realiza a través de Composer:



composer require cboden/ratchet


Después de la instalación, crearemos una clase base para el servidor WebSocket. En Ratchet, el servidor se implementa a través de la interfaz MessageComponentInterface, que contiene cuatro métodos:



  • onOpen — se llama cuando se conecta un nuevo cliente.
  • onMessage — procesa un mensaje entrante.
  • onClose — se activa cuando un cliente se desconecta.
  • onError — maneja errores de conexión.


Ejemplo de un servidor simple:



<?phpuse Ratchet\\MessageComponentInterface;use Ratchet\\ConnectionInterface;

class ChatServer implements MessageComponentInterface { protected $clients;

public function __construct() { $this->clients = new \\SplObjectStorage; }

public function onOpen(ConnectionInterface $conn) { $this->clients->attach($conn); echo "Nueva conexión: {$conn->resourceId}"; }

public function onMessage(ConnectionInterface $from, $msg) { foreach ($this->clients as $client) { if ($from !== $client) { $client->send($msg); } } }

public function onClose(ConnectionInterface $conn) { $this->clients->detach($conn); echo "Conexión {$conn->resourceId} cerrada"; }

public function onError(ConnectionInterface $conn, \\Exception $e) { echo "Error: {$e->getMessage()}"; $conn->close(); }}


Inicio del servidor WebSocket y parte del cliente



Para iniciar el servidor, crearemos un script server.php:



<?phprequire __DIR__ . '/vendor/autoload.php';

use Ratchet\\Server\\IoServer;use Ratchet\\Http\\HttpServer;use Ratchet\\WebSocket\\WsServer;

$server = IoServer::factory( new HttpServer( new WsServer( new ChatServer() ) ), 8080);

echo "Servidor WebSocket iniciado en el puerto 8080";$server->run();


Inicia el servidor con el comando:



php server.php

Blogs

Book Recommendations