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.).
  1. Instalación:

    php artisan install:broadcasting
    #elige Reverb cuando te pregunte
    
    Esto instala Reverb, Laravel Echo (lado cliente), configura .env y publica archivos necesarios.
  2. Crear un evento simple:

    php artisan make:event PingEvent
    
  3. 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';
        }
    }
    
  4. 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
    
  5. 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>
    
  6. 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

  1. Abrir http://127.0.0.1:8000 (o tu dominio) → verás la página vacía.
  2. Abrir la misma URL en otra pestaña/ventana/incógnito.
  3. En cualquiera de las pestañas visitar: http://127.0.0.1:8000/ping.
  4. Ver cómo aparece el mensaje instantáneamente en todas las pestañas.