Nexanexa
Paso 11

Tiempo real: SSE y WebSocket

connectSSE y connectSocket en @nexa/http envuelven las APIs nativas del navegador en señales reactivas — sin protocolo propio.

Server-Sent Events

import { connectSSE } from "@nexa/http";

const notifications = connectSSE({ url: "/events" });
// notifications.data.value -> el último mensaje

data es el último mensaje recibido, parseado como JSON si se puede.

WebSocket

import { connectSocket } from "@nexa/http";

const chat = connectSocket({ url: "wss://miapp.com/chat" });
chat.send({ text: "hola" });
// chat.status.value -> "connecting" | "open" | "reconnecting" | "closed"

status refleja el ciclo de vida real de la conexión; send() serializa objetos como JSON automáticamente.

Reconexión real, con backoff

const chat = connectSocket({
    url: "wss://miapp.com/chat",
    reconnect: { maxAttempts: 10, baseDelayMs: 500, maxDelayMs: 15000 }
});

Si la conexión se cae, reconnect: true (o un objeto { maxAttempts, baseDelayMs, maxDelayMs } para ajustarlo) hace que se reconecte sola con backoff exponencial + jitter — status pasa por "reconnecting" mientras lo intenta. Verificado matando y levantando un servidor de WebSocket real mientras un navegador real mantenía la conexión abierta. Sin esa opción, sigue siendo el comportamiento de siempre: status pasa a "closed" y se queda ahí.