Server
Die Server-Klasse ist der autoritative Multiplayer-Server. Sie verwaltet Client-Verbindungen, verarbeitet Befehle und sendet den Weltzustand.
Setup
import { Server, BaseGame } from '@mavonengine/core'
import type { Channel } from '@geckos.io/server'
class MyServer extends Server {
onConnection(channel: Channel): void {
// Ein neuer Client hat sich verbunden
console.log('client verbunden:', channel.id)
}
onCommand(command: unknown, delta: number): void {
// Einen eingehenden Client-Befehl verarbeiten
}
getStateSyncDistance(): number {
// Sichtbarkeitsradius (Einheiten) für Zustandsabgleich zurückgeben
return 100
}
}
const game = MyBaseGame.instance()
const server = new MyServer(game)
server.start()
Ports
| Port | Zweck |
|---|---|
8081 | geckos.io WebRTC-Socket-Server |
8050 | HTTP-Server (Health-Check, Meta-Endpunkte) |
Abstrakte Methoden
| Methode | Beschreibung |
|---|---|
onConnection(channel) | Wird aufgerufen, wenn ein neuer Client sich verbindet |
onCommand(command, delta) | Wird für jeden gepufferten Befehl bei jedem Tick aufgerufen |
getStateSyncDistance() | Gibt die maximale Distanz für Zustandsabgleich-Sichtbarkeit zurück |
Befehlspuffer
Clients senden Befehle (z.B. Eingabe-Frames) an den Server. Der Server stellt sie in eine Warteschlange und verarbeitet sie in Reihenfolge bei jedem Tick über onCommand. Dies verhindert Cheating und sorgt für deterministische Simulation.
HTTP-Endpunkte
Registriere benutzerdefinierte HTTP-Routen mit onHttp:
server.onHttp((app) => {
app.get('/status', (req, res) => {
res.json({ players: Object.keys(world.entities).length })
})
})
Ein eingebauter /health-Endpunkt wird automatisch registriert.
Bandbreitenverfolgung
Der Server verfolgt ausgehende Bandbreite pro Tick. Greife über server.bandwidthTracker zur Überwachung darauf zu.
ServerWorld
Für die serverseitige Welt (mit Player-/Client-Verfolgung) verwende ServerWorld:
import { ServerWorld } from '@mavonengine/core'
ServerWorld erweitert BaseWorld und fügt Player-Verwaltung für verbundene Clients hinzu.