Netzwerk

Zustandsabgleich

Wie Entity-Zustand vom Server an Clients serialisiert und gesendet wird.

Zustandssynchronisierung ist der Prozess, durch den der Server bei jedem Tick den autoritativen Weltzustand an verbundene Clients sendet.

Wie es funktioniert

  1. Server-Tick — Bei jedem festen Tick (Standard 30/s) berechnet der Server die Physikwelt und aktualisiert alle Entities
  2. Serialisierung — Der Zustand jeder Entity wird über serialize() (von GameObject) serialisiert
  3. Distanzfilterung — Nur Entities innerhalb von getStateSyncDistance() eines bestimmten Clients werden in das Zustandspaket dieses Clients aufgenommen
  4. Senden — Der gefilterte Zustand wird über den WebRTC-Socket an jeden Client gesendet
  5. Client anwenden — Der Client ruft updateFromNetwork(data) auf jeder passenden lokalen Entity auf

Entfernungsbasierte Sichtbarkeit

Der Server sendet nur Zustand für Entities innerhalb eines konfigurierbaren Radius jedes verbundenen Clients. Dies reduziert die Bandbreite für große Welten.

class MyServer extends Server {
  getStateSyncDistance(): number {
    return 150 // Nur Entities innerhalb von 150 Einheiten synchronisieren
  }
}

Bandbreitenverfolgung

Überwache ausgehende Bandbreite mit dem eingebauten Tracker:

server.bandwidthTracker // Auf Bandbreitenstatistiken zugreifen

Zustandspaket-Format

Jede Entity trägt ihre serialize()-Ausgabe zum Zustandspaket bei. Das Format ist:

  • Entity-ID (Schlüssel)
  • Serialisierter Zustand (Wert) — Position, Rotation, Zustands-Hash und beliebige benutzerdefinierte Felder

Entities mit garbageCollect === true werden aus Zustandspaketen ausgelassen und der Client wird benachrichtigt, sie zu entfernen.

Tick-Rate

Die Server-Tick-Rate bestimmt, wie häufig der Zustand gesendet wird. Standard ist 30 Ticks/Sekunde, entsprechend gängigen Spielserver-Konventionen (sv_tickrate).

const game = BaseGame.instance()
game.tickRate // 30 (Standard)

Eine höhere Tick-Rate ergibt flüssigere Interpolation, erhöht aber Bandbreite und CPU-Auslastung.