C'est une question plus profonde que cette question .
Lorsqu'un message de discussion est envoyé dans un système décentralisé, plusieurs événements se produisent consécutivement. Si un message est envoyé via un serveur de routage, comme dans Facebook Messenger ou Slack ou la plupart des autres systèmes de messagerie, ces choses se produisent dans cet ordre:
De plus, ces choses se produisent, entrelacées avec ce qui précède:
Il y a beaucoup d'incertitude dans l'ordre de ces événements, et il peut y avoir des minutes, des heures ou même des jours entre eux.
Messenger donne à l'utilisateur quelques commentaires en montrant
De plus, l'ordre de plusieurs messages sur plusieurs appareils est incertain. Nous pouvons utiliser des techniques comme les horloges vectorielles pour comprendre un ordre partiel, mais un ordre total est impossible à trouver. Cela devient encore plus difficile lorsque les horloges des utilisateurs sont définies de manière incorrecte ou lorsque les messages sont envoyés, mais mettent une heure à atteindre un serveur, peut-être parce que l'utilisateur a perdu la couverture de la tour de téléphonie cellulaire.
Cette question comporte deux parties:
Quand est-ce que nous horodatons les messages?
Deuxièmement, dans quel ordre les messages doivent-ils être affichés?
L'ordre des messages par horodatage signifie que les messages peuvent se faufiler dans l'historique des discussions quelques minutes ou semaines plus tard, si l'horodatage est généré sur le périphérique de l'utilisateur ou si le message est coincé sur un serveur quelque part. Ordonner les choses par horloges vectorielles signifie que les messages de commande affichés à l'écran peuvent ne pas correspondre à leurs horodatages.
Je veux vos réflexions du point de vue de l'expérience utilisateur. Il existe d'autres points de vue importants, tels que la sécurité, les performances et l'exactitude mathématique, mais je ne veux pas de commentaires de ces points de vue pour le moment.
Je recommande fortement deux choses pour préserver la santé mentale des utilisateurs:
Affichez toujours les messages dans le même ordre à tous les participants d'une conversation.
N'essayez jamais de filtrer les messages d'une manière qui puisse les filtrer différemment selon les différents participants à une conversation.
Cela dit, je recommande que l'ordre soit, dans la mesure du possible, l'ordre dans lequel les messages ont été reçus par un serveur central. Vous pouvez annoter les messages avec l'heure à laquelle ils ont été envoyés, si vous le souhaitez.
La raison principale de ces règles est d'empêcher les situations intentionnelles ou accidentelles dans lesquelles les participants comprennent différemment le déroulement d'une conversation.
La source de facto de l'horodatage de vérité est l'heure UTC du serveur.
Le problème est que les appareils clients ne sont pas toujours en ligne - parfois, un mobile n'a ni WiFi ni réseau, donc les demandes sont mises en file d'attente. En outre, les clients peuvent tempérer avec le temps de leur appareil.
Par expérience, il n'y a aucun moyen de s'assurer que les clients ne tempèrent pas avec le temps de leur appareil, alors qu'il est hors ligne. Mais c'est le meilleur que nous ayons pu trouver, pour un système qui dépendait d'un minutage précis des événements utilisateur (les utilisateurs signalent le début et la fin du travail):
Une surpuissance complète pour la plupart des scénarios, si vous me demandez, mais j'espère que cela vous aidera.