story-research-zapwall/docs/nostr-event-order.md
2026-01-06 20:59:59 +01:00

2.7 KiB

Ordre d'arrivée des notes depuis les relais

Comment fonctionne la récupération avec rotation de relais

1. Sélection du relai

Avec tryWithRelayRotation, le système :

  1. Essaie les relais un par un dans l'ordre de priorité configuré
  2. Crée une subscription avec un seul relai à la fois
  3. Si le premier relai échoue (timeout ou erreur de connexion), passe au suivant
  4. Continue jusqu'à trouver un relai qui répond

2. Arrivée des événements

Une fois qu'une subscription est établie avec un relai qui fonctionne :

Subscription créée → Relai commence à envoyer les événements

Les événements arrivent de manière asynchrone via le callback sub.on('event') :

Event 1 reçu
Event 2 reçu
Event 3 reçu
...
Event N reçu
EOSE (End of Stored Events) → Le relai a fini d'envoyer

3. Ordre des événements

L'ordre d'arrivée des événements n'est pas garanti :

  • Pas nécessairement chronologique : Le relai peut envoyer dans n'importe quel ordre
  • Pas nécessairement par ID : Les événements peuvent arriver dans un ordre aléatoire
  • Déduplication automatique : Les événements avec le même ID ne sont traités qu'une seule fois

4. Exemple concret

Si vous avez 3 relais configurés : relay1, relay2, relay3

Scénario 1 : Relay1 fonctionne

1. Essaie relay1 → ✅ Connexion réussie
2. Reçoit événements depuis relay1 uniquement
3. Tous les événements viennent de relay1

Scénario 2 : Relay1 échoue, relay2 fonctionne

1. Essaie relay1 → ❌ Timeout après 5 secondes
2. Essaie relay2 → ✅ Connexion réussie
3. Reçoit événements depuis relay2 uniquement
4. Tous les événements viennent de relay2

Scénario 3 : Tous les relais fonctionnent

1. Essaie relay1 → ✅ Connexion réussie (premier qui répond)
2. Reçoit événements depuis relay1 uniquement
3. relay2 et relay3 ne sont pas utilisés pour cette subscription

5. Pourquoi un seul relai à la fois ?

  • Efficacité : Un seul relai suffit pour récupérer les événements
  • Simplicité : Plus facile de gérer une seule source
  • Pas de doublons : Les événements viennent d'une seule source, pas besoin de dédupliquer

6. Problèmes de rotation pendant la réception

⚠️ Important : Si un relai échoue pendant la réception des événements :

  • La subscription est interrompue
  • Les événements déjà reçus sont traités
  • Un nouveau relai est essayé pour une nouvelle subscription

Conclusion

Les notes arrivent d'un seul relai à la fois, dans un ordre non garanti (pas forcément chronologique), et sont traitées au fur et à mesure de leur arrivée jusqu'à recevoir EOSE (End of Stored Events).