Zustandsabgleich
Zustandssynchronisierung ist der Prozess, durch den der Server bei jedem Tick den autoritativen Weltzustand an verbundene Clients sendet.
Wie es funktioniert
- Server-Tick — Bei jedem festen Tick (Standard 30/s) berechnet der Server die Physikwelt und aktualisiert alle Entities
- Serialisierung — Der Zustand jeder Entity wird über
serialize()(vonGameObject) serialisiert - Distanzfilterung — Nur Entities innerhalb von
getStateSyncDistance()eines bestimmten Clients werden in das Zustandspaket dieses Clients aufgenommen - Senden — Der gefilterte Zustand wird über den WebRTC-Socket an jeden Client gesendet
- 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.