Flujo maestro y algoritmos
Esta página contiene el diagrama de flujo maestro del ciclo de vida de Micro Socket y enlaces a los sub-algoritmos.
Flujo del algoritmo maestro
El diagrama muestra el camino de un mensaje desde publicación hasta entrega al cliente en todas las capas.
Sub-algoritmos
| Algoritmo | Descripción | Página |
|---|---|---|
| Dedup / Idempotencia | Evitar doble procesamiento con messageId | Dedup e idempotencia |
| ACL | Autorización SUBSCRIBE/PUBLISH | ACL y autorización |
| Orden (SeqNo) | Orden de mensajes y gap/replay | Orden y SeqNo |
| Resume | Sesión y replay tras desconexión | Resume y replay |
Pseudocódigo: bucle principal del gateway (resumen)
FUNCTION handleMessage(ws, raw):
msg = JSON.parse(raw)
user = getUserId(ws.token)
IF msg.type == "subscribe":
IF NOT aclAllow(user, msg.topic, "read") THEN sendError(ws, "ACL_DENIED"); RETURN
addSubSocket(ws, msg.topic)
RETURN
IF msg.type == "publish":
IF NOT aclAllow(user, msg.topic, "write") THEN sendError(ws, "ACL_DENIED"); RETURN
IF dedupContains(user.id, msg.messageId) THEN sendAck(ws, msg.messageId, "duplicate"); RETURN
dedupAdd(user.id, msg.messageId)
seqNo = nextSeq(msg.topic)
publishToBackbone(msg.topic, { ...msg.payload, seqNo })
sendAck(ws, msg.messageId, "ok")
RETURN
IF msg.type == "resume":
session = getSession(msg.sessionId)
IF NOT session THEN sendError(ws, "SESSION_EXPIRED"); RETURN
replayGap(session, msg.lastSeqPerTopic, ws)
RETURNImplementación completa en Node.js: Gateway (general), Gateway ACL + Dedup.