Utilizza il filtro dell'area di interesse. Se un mondo è suddiviso in 3 server e l'area sul server 1 non si trova vicino all'area del server 3, non c'è motivo per loro di condividere informazioni sulle entità.
Allo stesso modo, su un singolo server, inviare solo le informazioni rilevanti ai client. Se il giocatore A si trova sull'estremità opposta della mappa rispetto al giocatore B, non c'è motivo di inviare aggiornamenti da B ad A o viceversa.
Quando si hanno più server in un mondo continuo, si avranno entità vicine a un bordo sul server 2 che sono vicine alle entità sul server 1. È possibile inviare gli aggiornamenti dal server "autorevole" per un'entità all'altro server (se appropriato) e allo stesso modo inoltrare qualsiasi messaggio al server autorevole come appropriato.
Sì, in questo caso, un server sarà leggermente obsoleto per determinate entità. Non provare a risolverlo. Basta occuparsene. Supponiamo che le entità potrebbero essere un po 'obsolete. Esegui qualsiasi logica che richieda informazioni aggiornate solo sul server proprietario autorevole delle entità. Quando un'entità influisce su un'altra, invia un messaggio e presumi che possa richiedere più tick di logica di gioco prima che venga elaborata e la tua vista venga aggiornata.
Questo design semplifica inoltre il threading di un singolo server. Nessuna entità dovrebbe modificarne direttamente un'altra, inviare solo messaggi e le cache del proxy locale per server / per thread dovrebbero essere considerate non aggiornate.
Ad esempio, se l'entità A attacca l'entità B, non controllare la vita di B e quindi inviare un messaggio di morte se colpisce 0. Basta inviare un messaggio "danneggiato", lasciare che il server autorevole per B lo gestisca e quindi gestire qualsiasi Messaggio "entità morto" inviato successivamente dal server B se l'entità A se ne preoccupa.
Lo stesso vale per qualsiasi applicazione non di giochi di grandi dimensioni e scalabile. Un database centrale non è una magica tecnologia di condivisione istantanea. Due server devono comunicare con i messaggi, in modo asincrono, in batch, al fine di mantenere un throughput elevato. Da qui la popolarità di tecnologie come AMPQ e simili. I database servono per l'archiviazione e supportano la sincronizzazione per necessità, consentendo loro di essere utilizzati per le comunicazioni, non perché sono essi stessi pensati per la sincronizzazione o la comunicazione.