関心領域のフィルタリングを使用します。ワールドが3つのサーバーに分割されており、サーバー1の領域がサーバー3の領域の近くにない場合、エンティティに関する情報を共有する必要はまったくありません。
同様に、単一のサーバーでは、関連情報のみをクライアントに送信します。プレーヤーAがマップのプレーヤーBとはまったく反対側にいる場合、Bに関する更新をAに送信する、またはその逆の理由はありません。
連続的な世界に複数のサーバーがある場合、サーバー1のエンティティに近いサーバー2のエッジ近くにエンティティがあります。エンティティの「権限のある」サーバーから他のサーバーに更新を送信できます(適切な場合)。 、同様にメッセージを適切な権限のあるサーバーに転送します。
はい、この場合、1つのサーバーが特定のエンティティに対してわずかに古くなります。それを解決しようとしないでください。ただそれに対処してください。エンティティが少し古くなっていると想定します。エンティティを正式に所有しているサーバーでのみ、最新の情報を必要とするロジックを実行します。エンティティが別のエンティティに影響を与える場合は、メッセージを送信し、処理されてビューが更新される前に、複数のゲームロジックティックがかかる可能性があると想定します。
この設計により、単一サーバーのスレッド化もはるかに簡単になります。エンティティは別のものを直接変更してメッセージを送信するだけでなく、ローカルのサーバーごと/スレッドごとのプロキシキャッシュはわずかに古くなっていると想定する必要があります。
たとえば、エンティティAがエンティティBを攻撃する場合、Bの存続期間を確認せず、0に達した場合は死のメッセージを送信します。「破損」メッセージを送信し、Bの権限のあるサーバーに処理させてから、エンティティAが気にした場合、後でサーバーBから送信された「エンティティダイ」メッセージ。
同じことが、大規模でスケーラブルな非ゲームアプリケーションにも当てはまります。中央データベースは、魔法のようなインスタント共有テクノロジーではありません。高スループットを維持するために、2つのサーバーは非同期でバッチでメッセージと通信する必要があります。したがって、AMPQなどのテクノロジーの人気が高まっています。データベースはストレージ用であり、必要に応じて同期をサポートします。データベース自体が同期または通信を目的としているためではなく、通信に使用できるようにします。