LARAVEL REVERB
Laravel Reverb es el servidor WebSocket oficial (first-party) para aplicaciones Laravel. Permite añadir comunicación en tiempo real de forma nativa y muy sencilla, sin depender de servicios externos como Pusher, Ably o Socket.io.Sirve para crear aplicaciones donde los usuarios necesitan ver cambios instantáneamente sin recargar la página, por ejemplo:
- Chats en vivo.
- Notificaciones en tiempo real.
- Tableros de control (dashboards) que se actualizan solos.
- Subastas en directo.
- Colaboración multiusuario (tipo Google Docs básico).
- Actualización de estados (pedidos, scores en juegos, etc.).
- Instalación:
Esto instala Reverb, Laravel Echo (lado cliente), configura .env y publica archivos necesarios.php artisan install:broadcasting #elige Reverb cuando te pregunte - Crear un evento simple:
php artisan make:event PingEvent - Editar "app/Events/PingEvent.php":
namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class PingEvent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public string $message; public function __construct(string $message = '¡Pong! Alguien hizo ping ') { $this->message = $message; } public function broadcastOn(): array { return [ new Channel('public-ping'), // canal público (todos lo ven) ]; } // Opcional: cómo se llamará el evento en el frontend public function broadcastAs() { return 'ping.received'; } } - Ruta para disparar el evento ("routes/web.php"):
use App\Events\PingEvent; use Illuminate\Support\Facades\Route; Route::get('/ping', function () { broadcast(new PingEvent("¡Ping desde " . now()->format('H:i:s') . "!"))->toOthers(); return view('ping'); // una vista simple para probar }); Route::get('/', fn() => view('ping')); // página principal - Vista básica con Echo ("resources/views/ping.blade.php"):
//javascript de la plantilal <script> Echo.channel('public-ping') .listen('.ping.received', (e) => { console.log('Evento recibido:', e); const div = document.createElement('div'); div.textContent = `${new Date().toLocaleTimeString()} → ${e.message}`; div.style.padding = '8px'; div.style.borderBottom = '1px solid #eee'; document.getElementById('messages').prepend(div); }); </script> //html de la plantilla <div style="max-width:600px; margin:40px auto; font-family:sans-serif;"> <h1>Prueba Laravel Reverb</h1> <p>Abre esta misma página en varias pestañas/ventanas/navegadores.</p> <p>Luego visita: <strong>http://tu-dominio/ping</strong></p> <div id="messages" style="margin-top:30px; background:#f9f9f9; min-height:200px; border:1px solid #ddd;"> <!-- Aquí aparecerán los mensajes en tiempo real --> </div> </div> - Iniciar Reverb en una terminal (mientras se tiene "php artisan serve" corriendo en otra):
php artisan reverb:start --debug # o en producción: php artisan reverb:start --host=0.0.0.0 --port=8080
Cómo probarlo
- Abrir http://127.0.0.1:8000 (o tu dominio) → verás la página vacía.
- Abrir la misma URL en otra pestaña/ventana/incógnito.
- En cualquiera de las pestañas visitar: http://127.0.0.1:8000/ping.
- Ver cómo aparece el mensaje instantáneamente en todas las pestañas.