Seguimiento de la presencia y el estado en línea
Construya un sistema de presencia en tiempo real que muestre quién está en línea, difunda eventos de conexión y desconexión y muestre el estado actual de los usuarios.
Seguimiento de la presencia y el estado en línea es una lección gratuita de WebSockets & Real-Time Systems with Spring en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de WebSockets & Real-Time Systems with Spring, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de WebSockets & Real-Time Systems with Spring incluye 4 lecciones en total.
Partes de esta lección aún no han sido traducidas y se muestran en inglés.
What Is Presence?
Presence is knowing who is currently online: the green dots in chat apps, the live cursors in collaborative editors, the active-now lists. It is one of the most requested real-time features.
Presence Is About Lifecycle Events
The core insight: presence is derived from connection lifecycle. When a session opens, mark the user online; when it closes, mark them offline, then broadcast the change.
Listening to Connect Events
Spring publishes a SessionConnectedEvent when a STOMP session is established. Use it to record the user as online.
@EventListener
public void onConnect(SessionConnectedEvent e) {
String user = e.getUser().getName();
presence.markOnline(user);
broadcast(user, "ONLINE");
}Listening to Disconnect Events
A matching SessionDisconnectEvent fires on close. Mark the user offline and broadcast it.
@EventListener
public void onDisconnect(SessionDisconnectEvent e) {
String user = userFor(e.getSessionId());
presence.markOffline(user);
broadcast(user, "OFFLINE");
}Storing Presence State
For a single server a concurrent map works. For a cluster, store presence in Redis so every node sees the same online set.
redis.opsForSet().add("online:users", username);
redis.opsForValue().set("presence:" + username, "ONLINE", Duration.ofMinutes(2));Broadcasting Status Changes
Push each change to a presence topic so every interested client updates its UI live.
messagingTemplate.convertAndSend("/topic/presence",
new PresenceEvent(username, status));Multiple Tabs and Devices
A user with two tabs has two sessions. Reference-count them: only mark offline when the last session closes, or you will flicker the status.
Handling Ungraceful Disconnects
A crash may not send a clean close. Pair presence with heartbeats and a TTL: if no heartbeat arrives before the key expires, treat the user as offline.
Last-Seen Timestamps
Beyond online/offline, record a last-seen time on disconnect. The UI can then show "active 5 minutes ago" for offline users.
redis.opsForValue().set("lastseen:" + username, Instant.now().toString());Sending the Initial Snapshot
When a client first connects it needs the current online list, not just future changes. Send a snapshot on subscription, then stream deltas.
@SubscribeMapping("/presence.init")
public Set<String> initial() {
return presence.onlineUsers();
}Privacy Considerations
Presence can leak behavior patterns. Offer an invisible mode and respect it server-side, so a user who opts out is never broadcast as online.
Quick Check
Test your presence knowledge.
Recap
You built presence:
- Presence derives from connect/disconnect lifecycle events
- Use
SessionConnectedEvent/SessionDisconnectEventand broadcast changes - Store shared state in Redis for clustering; reference-count multiple sessions
- Pair with heartbeats and TTLs to catch ungraceful disconnects
- Send an initial snapshot, track last-seen, and honor invisible mode
Preguntas frecuentes
¿La lección «Seguimiento de la presencia y el estado en línea» es gratis?
Sí — el texto completo de «Seguimiento de la presencia y el estado en línea» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de WebSockets & Real-Time Systems with Spring, actualiza a CoddyKit PRO. El curso de WebSockets & Real-Time Systems with Spring incluye 4 lecciones en total.
¿Qué aprenderé en «Seguimiento de la presencia y el estado en línea»?
Construya un sistema de presencia en tiempo real que muestre quién está en línea, difunda eventos de conexión y desconexión y muestre el estado actual de los usuarios. Practicas WebSockets & Real-Time Systems with Spring con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar WebSockets & Real-Time Systems with Spring?
No se requiere experiencia previa. WebSockets & Real-Time Systems with Spring en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Seguimiento de la presencia y el estado en línea»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de WebSockets & Real-Time Systems with Spring?
Sí. Cada lección de WebSockets & Real-Time Systems with Spring incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Server-Sent Events (SSE) frente a WebSockets
- Arquitecturas de envío de datos en tiempo real
- Implementación de notificaciones de usuario
- Seguimiento de la presencia y el estado en línea