Netzwerk

Server

Autoritativer Server mit Befehlspuffer, Tick-Schleife und Zustandsabgleich.

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

PortZweck
8081geckos.io WebRTC-Socket-Server
8050HTTP-Server (Health-Check, Meta-Endpunkte)

Abstrakte Methoden

MethodeBeschreibung
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.