Biblioteca WebSocket Ratchet para PHP: creación en tiempo real en el sitio web

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

¿Qué es WebSocket y para qué sirve la biblioteca Ratchet para PHP?

WebSocket es un protocolo que proporciona una conexión bidireccional permanente entre el cliente (navegador) y el servidor. A diferencia del HTTP clásico, donde solo el cliente inicia las solicitudes, WebSocket permite que el servidor envíe datos al instante, sin esperar una solicitud. Es la solución ideal para chats, notificaciones en tiempo real, juegos en línea, rastreadores y cualquier aplicación donde la baja latencia sea importante.

PHP estándar no tiene soporte integrado para WebSocket, pero la biblioteca Ratchet (que utiliza el componente ReactPHP) llena este vacío. Ratchet es una biblioteca asíncrona que permite ejecutar un servidor WebSocket directamente desde PHP, manejando múltiples conexiones simultáneamente sin bloqueos.



Características principales de Ratchet

  • Asincronía — basada en ReactPHP, no bloquea el flujo al esperar datos.
  • Soporte de protocolos — WebSocket (RFC 6455), así como componentes HTTP (para aplicaciones híbridas).
  • Simplicidad — código mínimo para iniciar el servidor.
  • Escalabilidad — se puede combinar con ZeroMQ o Redis para trabajar en clúster.
  • Compatibilidad — funciona con cualquier navegador moderno a través del objeto WebSocket integrado.


Instalación de Ratchet

La instalación se realiza a través de Composer. Abra la terminal en la raíz del proyecto y ejecute:

composer require cboden/ratchet

Después de la instalación, en la carpeta vendor aparecerán todas las dependencias, incluido ReactPHP.



Creación de un servidor WebSocket simple con Ratchet

Creemos un archivo server.php:

<?phprequire 'vendor/autoload.php';

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

class Chat 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(); }}

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

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


Explicación del código

  • Chat — clase que implementa MessageComponentInterface. En onOpen guardamos la conexión, en onMessage — reenviamos el mensaje a todos excepto al remitente.
  • IoServer::factory — crea el servidor basado en ReactPHP. Envolvemos nuestro componente en WsServer (para WebSocket) y HttpServer (para compatibilidad con solicitudes HTTP).
  • El servidor escucha en el puerto 8080. Ejecútelo con el comando: php server.php.


Parte del cliente (JavaScript)

Cree un archivo HTML client.html:

<!DOCTYPE html><html><head>    <title>Chat WebSocket</title>    <script>        const ws = new WebSocket('ws://localhost:8080');

Recommendations