0Pricing
WebSockets & Real-Time Systems with Spring · Lección

Indicadores de escritura y presencia en línea

Aprenda a añadir indicadores de escritura y presencia en línea en tiempo real a una aplicación de chat mediante eventos STOMP, heartbeats y seguimiento de presencia en Spring.

Indicadores de escritura y presencia 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.

Beyond Messages

Great chat apps do more than deliver messages. Typing indicators and online presence make conversations feel live and responsive.

This lesson adds both features on top of your existing STOMP chat.

What Is Presence?

Presence tells users who is currently online, away, or offline. It is updated in real time as users connect and disconnect, giving the social cue that someone is available to chat.

Tracking Connections

Spring publishes SessionConnectedEvent and SessionDisconnectEvent. Listen for them to maintain a live set of online users.

@EventListener
public void onConnect(SessionConnectedEvent event) {
    String user = userFrom(event);
    onlineUsers.add(user);
    broadcastPresence(user, 'ONLINE');
}

Handling Disconnects

When a user disconnects, remove them and notify others so the presence list stays accurate.

@EventListener
public void onDisconnect(SessionDisconnectEvent event) {
    String user = userFrom(event);
    onlineUsers.remove(user);
    broadcastPresence(user, 'OFFLINE');
}

Broadcasting Presence

Send presence updates to a shared topic so every connected client can update its UI.

private void broadcastPresence(String user, String status) {
    Map<String, String> event = new HashMap<>();
    event.put('user', user);
    event.put('status', status);
    messagingTemplate.convertAndSend('/topic/presence', event);
}

A Typing Event Model

Typing indicators are lightweight events, not stored messages. Define a small payload carrying the sender, the room, and whether they started or stopped typing.

{
  "type": "TYPING",
  "room": "general",
  "sender": "alice",
  "typing": true
}

Receiving Typing Events

Map a destination for typing events and relay them to the room topic without persisting them.

@MessageMapping('/chat.typing')
public void typing(TypingEvent event) {
    messagingTemplate.convertAndSend(
        '/topic/room.' + event.getRoom() + '.typing', event);
}

Debouncing on the Client

Clients should not send a typing event for every keystroke. Debounce: send 'typing' once, then send 'stopped' after a short idle period. This reduces traffic dramatically.

let timer = null;
function onKeyPress() {
  sendTyping(true);
  clearTimeout(timer);
  timer = setTimeout(function () { sendTyping(false); }, 2000);
}

Heartbeats for Stale Sessions

Network drops do not always fire a disconnect event. Use STOMP heartbeats so the server can detect dead connections and mark those users offline, keeping presence accurate.

Scaling Presence

With multiple server instances, presence must be shared. Store online users in a central store like Redis and broadcast changes across instances so every client sees a consistent presence list.

Privacy Considerations

Presence and typing reveal user activity. Let users control visibility, and only share presence with people who should see it (for example, contacts or members of the same room), not everyone on the server.

Quick Check

Test your understanding of presence and typing indicators.

Recap

You learned to add online presence using Spring's session connect and disconnect events and typing indicators as lightweight, non-persisted STOMP events. Debouncing, heartbeats, a shared store for scaling, and privacy controls make these features production-ready.

Preguntas frecuentes

¿La lección «Indicadores de escritura y presencia en línea» es gratis?

Sí — el texto completo de «Indicadores de escritura y presencia 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 «Indicadores de escritura y presencia en línea»?

Aprenda a añadir indicadores de escritura y presencia en línea en tiempo real a una aplicación de chat mediante eventos STOMP, heartbeats y seguimiento de presencia en Spring. 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 «Indicadores de escritura y presencia 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

  1. Diseño de un modelo de mensajes de chat
  2. Implementación de salas de chat públicas
  3. Mensajería privada con STOMP
  4. Indicadores de escritura y presencia en línea
← Volver a WebSockets & Real-Time Systems with Spring