Je travaille sur un système d'entités pour un jeu en réseau et j'attribue à chaque entité un identifiant entier 32 bits unique que je peux utiliser pour sérialiser les références aux entités et aux entités elles-mêmes.
Actuellement, j'incrémente simplement un compteur chaque fois qu'une entité est créée. Je suppose que les identifiants finiront par manquer mais je ne m'attends pas vraiment à avoir 4 milliards d'entités. Cela évite également le problème si l'entité n ° 5 est détruite et que nous obtenons un identifiant de 5. Est-ce destiné à faire référence au nouveau n ° 5 ou à l'ancien n ° 5 supprimé?
Le problème est que je ne sais pas comment gérer / éviter les collisions. Actuellement, si un client reçoit une mise à jour pour une entité avec un identifiant supérieur à son "identifiant gratuit" actuel, il ne fait que dépasser son identifiant gratuit jusqu'au-delà. Mais cela ne semble pas très robuste.
J'ai pensé à peut-être attribuer des plages à chaque client afin qu'il puisse allouer des entités sans entrer en conflit (disons que les n premiers bits sont le numéro du joueur), mais je m'inquiète de ce qui se passe si les plages commencent à se chevaucher au fil du temps.
Existe-t-il une meilleure façon de gérer cela? Dois-je même me soucier des ID débordant ou dépassant la fin de la plage autorisée? Je pourrais ajouter du code pour détecter ces cas, mais que ferait-il s'ils se produisaient autre que le crash.
Une autre option consiste à utiliser quelque chose avec une plus grande chance d'être unique comme un GUID 128 bits, mais cela semble vraiment lourd pour un jeu qui essaie de minimiser le trafic réseau. De plus, de manière réaliste, je n'aurais jamais besoin de plus d'entités à la fois, puis je rentrerais dans un entier 32 bits ou même 24 bits.
Merci!