Skip to content

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

AlgoritmoDescripciónPágina
Dedup / IdempotenciaEvitar doble procesamiento con messageIdDedup e idempotencia
ACLAutorización SUBSCRIBE/PUBLISHACL y autorización
Orden (SeqNo)Orden de mensajes y gap/replayOrden y SeqNo
ResumeSesión y replay tras desconexiónResume 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)
    RETURN

Implementación completa en Node.js: Gateway (general), Gateway ACL + Dedup.

Star the repo on GitHub if this documentation is useful — link in the navbar above.