# Chat en tiempo real con Laravel Reverb

## ¿Hay que abrir otra consola?

**Sí, en desarrollo.** Reverb es un **servidor WebSocket aparte**, igual que `php artisan queue:work` es aparte de `php artisan serve`.

| Proceso | Comando | Para qué |
|---------|---------|----------|
| API HTTP | `php artisan serve` o Apache/XAMPP | REST, login, chat por HTTP |
| WebSockets | `php artisan reverb:start` | Mensajes instantáneos en el chat |
| Colas (opcional) | `php artisan queue:listen` | Jobs en background |

Sin `reverb:start`, el chat **sigue funcionando** por REST + polling en la app (cada 4 s).

## Desarrollo local (3 terminales)

```bash
# Terminal 1 — API
cd backend
php artisan serve

# Terminal 2 — WebSockets
cd backend
php artisan reverb:start

# Terminal 3 — App Flutter (ejemplo)
cd mobile_app
flutter run --dart-define=API_BASE_URL=http://127.0.0.1:8000/api/v1 \
  --dart-define=REVERB_APP_KEY=tu_clave \
  --dart-define=REVERB_HOST=127.0.0.1 \
  --dart-define=REVERB_PORT=8080 \
  --dart-define=REVERB_SCHEME=http
```

## Configuración `.env` del backend

```env
BROADCAST_CONNECTION=reverb

REVERB_APP_ID=local-app
REVERB_APP_KEY=local-key
REVERB_APP_SECRET=local-secret
REVERB_HOST=0.0.0.0
REVERB_PORT=8080
REVERB_SCHEME=http
```

Genera claves con `php artisan reverb:install` o copia las que publique Reverb al arrancar.

Las mismas claves deben pasarse a Flutter con `--dart-define=REVERB_APP_KEY=...`.

## Producción (villearena.ddns.net)

No uses una consola manual. Usa **Supervisor** o **systemd** para mantener Reverb siempre activo:

```ini
[program:mallorcatrabaja-reverb]
command=php /ruta/backend/artisan reverb:start
autostart=true
autorestart=true
user=www-data
```

Abre el puerto **8080** (o el que uses) en el firewall y, si aplica, un proxy inverso Nginx para `wss://`.

## Cómo sabe la app si está en vivo

- Si `REVERB_APP_KEY` está en el build **y** Reverb responde → la app muestra **En vivo** y deja de hacer polling agresivo.
- Si no → **Modo polling** (REST cada 4 s), sin consola extra en el móvil.
