Verwenden Sie die Filterung des interessierenden Bereichs. Wenn eine Welt in drei Server aufgeteilt ist und sich der Bereich auf Server 1 nicht in der Nähe des Bereichs von Server 3 befindet, gibt es für sie keinen Grund, überhaupt Informationen über Entitäten auszutauschen.
Senden Sie auf einem einzelnen Server nur relevante Informationen an Clients. Befindet sich Spieler A am völlig anderen Ende der Karte als Spieler B, gibt es keinen Grund, Aktualisierungen über B an A zu senden oder umgekehrt.
Wenn Sie mehrere Server in einer kontinuierlichen Welt haben, haben Sie Entitäten in der Nähe eines Randes auf Server 2, die sich in der Nähe von Entitäten auf Server 1 befinden. Sie können Aktualisierungen vom "autorisierenden" Server für eine Entität an den anderen Server senden (falls zutreffend). und leiten Sie alle Nachrichten entsprechend an den autorisierenden Server weiter.
Ja, in diesem Fall ist ein Server für bestimmte Entitäten etwas veraltet. Versuchen Sie nicht, das zu lösen. Komm damit klar. Angenommen, Entitäten sind möglicherweise etwas veraltet. Führen Sie eine Logik aus, die aktuelle Informationen nur auf dem Server benötigt, dem die Entitäten autorisiert gehören. Wenn eine Entität eine andere beeinflusst, senden Sie eine Nachricht und gehen Sie davon aus, dass möglicherweise mehrere Spiellogik-Ticks erforderlich sind, bevor sie verarbeitet und Ihre Ansicht aktualisiert wird.
Dieses Design erleichtert auch das Threading eines einzelnen Servers erheblich. Keine Entität sollte eine andere direkt ändern, nur Nachrichten senden, und die lokalen Proxy-Caches pro Server / pro Thread sollten als etwas veraltet angenommen werden.
Wenn beispielsweise Entität A Entität B angreift, überprüfen Sie nicht die Lebensdauer von B und senden Sie dann eine Todesnachricht, wenn sie 0 erreicht. Senden Sie einfach eine "beschädigte" Nachricht, lassen Sie den autorisierenden Server für B damit umgehen und behandeln Sie dann eine beliebige Nachricht Nachricht "Entität gestorben", die später von Server B gesendet wird, wenn Entität A sich darum kümmert.
Gleiches gilt für alle großen, skalierbaren Nicht-Spiele-Anwendungen. Eine zentrale Datenbank ist keine magische Instant-Sharing-Technologie. Zwei Server müssen asynchron stapelweise mit Nachrichten kommunizieren, um einen hohen Durchsatz aufrechtzuerhalten. Daher die Popularität von Technologien wie AMPQ und dergleichen. Datenbanken dienen der Speicherung und unterstützen die Synchronisierung, da sie für die Kommunikation verwendet werden können, nicht weil sie selbst für die Synchronisierung oder Kommunikation gedacht sind.