El tiempo real usa Reverb (WebSocket) detrás del mismo gateway que sirve la app, en /ws: no hay otro puerto ni otro dominio. Todos los canales son privados y sus mensajes no traen datos, solo el id del incidente y el tipo de cambio; el navegador vuelve a pedir a la API lo que necesita, con sus permisos de siempre. Si el tiempo real no está disponible, la app sigue funcionando igual.
| Canal | Quién lo escucha |
|---|---|
incidents.all | Quien tiene incidents.view.any |
incidents.unassigned | Quien tiene incidents.view.unassigned |
users.{ULID} | Solo esa persona: lo que creó o tiene asignado, su sesión y sus notificaciones |
Paso a paso
- NavegadorEspera 1,5 s tras abrir la app
Primero carga lo que la pantalla necesita; después se conecta.
- NavegadorPide GET /realtime
La clave pública y la ruta
/ws, que cambian por entorno sin reconstruir el front. - API¿Sesión completa?
El token de un ingreso a medias (falta el MFA) no sirve aquí.
- ReverbAcepta el WebSocket por /ws
Solo desde el origen de la app (
REVERB_ALLOWED_ORIGINS), mensajes de hasta 2 KB, 60 por minuto, sin eventos de cliente. - NavegadorCalcula sus canales según sus permisos
channelsFor: el general si ve todo, el de sin asignar si puede verlos, y siempre el personal. - NavegadorPide POST /broadcasting/auth una vez
Todas las suscripciones de la pestaña se firman en una sola petición, porque cada petición a PHP cuesta.
- API¿Cada canal está permitido?
Channels::allows, la misma regla de visibilidad del listado. Devuelve una firma por canal permitido y vacío en los demás. - ReverbSuscribe con la firma
- NavegadorEscucha y publica cada aviso en el bus
Si cambian sus permisos, entra a los canales nuevos y sale de los que ya no aplican. Al reconectarse emite
reconnectedy cada pantalla vuelve a consultar lo visible.
Qué ve la persona
El tiempo real no muestra errores propios: si no se puede conectar o se cae, la app funciona igual, solo que los cambios de otras personas se ven al recargar o al navegar.
Dónde está en el código
Channels: canales y quién puede escucharlos.RealtimeController: configuración y firma en una sola petición.config/reverb.php: orígenes, tamaño y límite de mensajes.useRealtimeConnectionyechoClient.- Explicación: Módulo Realtime y Tiempo real en operación.