Utilisez le filtrage des zones d'intérêt. Si un monde est divisé en 3 serveurs et que la zone sur le serveur 1 est loin de la zone du serveur 3, il n'y a aucune raison pour qu'ils partagent des informations sur les entités.
De même, sur un seul serveur, envoyez uniquement les informations pertinentes aux clients. Si le joueur A se trouve à l'extrémité totalement opposée de la carte du joueur B, il n'y a aucune raison d'envoyer des mises à jour sur B à A, ou vice versa.
Lorsque vous avez plusieurs serveurs dans un monde continu, vous aurez des entités proches d'un bord sur le serveur 2 qui sont proches d'entités sur le serveur 1. Vous pouvez envoyer des mises à jour du serveur "faisant autorité" pour une entité à l'autre serveur (le cas échéant) et transférez également tous les messages au serveur faisant autorité, le cas échéant.
Oui, dans ce cas, un serveur sera légèrement obsolète pour des entités particulières. N'essayez pas de résoudre cela. Débrouille toi avec. Supposons que les entités soient un peu obsolètes. Effectuez toute logique nécessitant des informations à jour uniquement sur le serveur propriétaire des entités. Lorsqu'une entité en affecte une autre, envoyez un message et supposez que cela peut prendre plusieurs ticks de logique de jeu avant d'être traité et que votre vue soit mise à jour.
Cette conception facilite également le thread d'un seul serveur. Aucune entité ne doit en modifier directement une autre, envoyer uniquement des messages, et les caches proxy locaux par serveur / par thread doivent être supposés être légèrement obsolètes.
Par exemple, si l'entité A attaque l'entité B, ne vérifiez pas la durée de vie de B et n'envoyez pas de message de mort s'il atteint 0. Envoyez simplement un message "endommagé", laissez le serveur faisant autorité pour B le gérer, puis gérez tout message "entité morte" envoyé ultérieurement par le serveur B si l'entité A s'en soucie.
Il en va de même pour toute application non ludique de grande taille. Une base de données centrale n'est pas une technologie magique de partage instantané. Deux serveurs doivent communiquer avec les messages, de manière asynchrone, par lots, afin de maintenir un débit élevé. D'où la popularité de technologies comme AMPQ et similaires. Les bases de données sont destinées au stockage et prennent en charge la synchronisation par nécessité, ce qui leur permet d'être utilisées pour les communications, non pas parce qu'elles sont elles-mêmes destinées à la synchronisation ou à la communication.