WebSocket en PHP: creación de 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

Introducción a WebSocket en PHP: de la teoría a la práctica



Las aplicaciones web modernas requieren cada vez más la transmisión instantánea de datos entre el cliente y el servidor. El ciclo tradicional de solicitud-respuesta HTTP, basado en long polling o solicitudes AJAX periódicas, ya no es suficiente para las tareas en tiempo real. Aquí es donde entra en juego el protocolo WebSocket, una tecnología que permite establecer una conexión bidireccional permanente entre el navegador y el servidor.



En este artículo, analizaremos cómo crear aplicaciones en tiempo real con PHP utilizando WebSocket. Aprenderá cómo instalar la biblioteca del servidor Ratchet, escribir un chat simple y un sistema de notificaciones, así como los obstáculos que le esperan. El material está dirigido a desarrolladores familiarizados con los conceptos básicos de PHP y JavaScript.



¿Qué es WebSocket y por qué es importante para PHP?



WebSocket es un protocolo que funciona sobre TCP. Se inicia como una solicitud HTTP (handshake), después de lo cual la conexión se "actualiza" a un canal bidireccional completo. A diferencia de HTTP:



  • El servidor puede enviar datos al cliente sin una solicitud previa.
  • La conexión permanece abierta, ahorrando recursos en handshakes repetidos.
  • La latencia de transmisión de datos es mínima: milisegundos frente a segundos con long polling.


Tradicionalmente, PHP se consideraba un lenguaje no adecuado para tareas en tiempo real debido a su modelo de "una solicitud, un proceso". Sin embargo, las bibliotecas modernas como Ratchet y ReactPHP permiten ejecutar procesos PHP de larga duración que funcionan como servidores WebSocket independientes. Esto abre posibilidades para:



  • Chats en línea y mensajería instantánea.
  • Sistemas de notificaciones (nuevos correos, pedidos, alertas).
  • Edición colaborativa de documentos.
  • Juegos y plataformas de trading.


Instalación y configuración del servidor WebSocket en PHP con Ratchet



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



Paso 1. Creamos el proyecto e instalamos las dependencias



mkdir websocket-phpcd websocket-phpcomposer require cboden/ratchet


Después de la instalación, en la carpeta vendor aparecerán Ratchet y ReactPHP.



Paso 2. Creamos la clase del servidor WebSocket



Cree un archivo server.php:



<?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 "Desconexión: {$conn->resourceId}"; }

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


Paso 3. Iniciamos el servidor



Agregue el código de inicio en server.php:



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

require __DIR__ . '/vendor/autoload.php';

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

echo "Servidor WebSocket iniciado en el puerto 8080";$se

Blogs

Book Recommendations