Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Exportieren für dedizierte Server

Wenn Sie einen dedizierten Server für Ihr Projekt auf einem Rechner laufen lassen wollen, der weder eine GPU oder einen Display-Server zur Verfügung hat, müssen Sie Godot mit dem headless Display-Server und Dummy Audio-Treiber laufen lassen.

Seit Godot 4.0 kann dies durch Ausführen einer Godot-Binärdatei auf einer beliebigen Plattform mit dem Kommandozeilenargument --headless oder durch Ausführen eines als dedizierten Server exportierten Projekts geschehen. Im Gegensatz zu Godot 3.x müssen Sie keine spezielle Server-Binärdatei mehr verwenden.

Editor vs. Exportvorlage

Es ist möglich, im Headless-Modus entweder ein Editor- oder ein Export-Template-Binary (Debug oder Release) zu verwenden. Welche Variante Sie verwenden sollten, hängt von Ihrem Anwendungsfall ab:

  • Exportvorlage: Verwenden Sie diese Vorlage für den Betrieb dedizierter Server. Sie enthält keine Editorfunktionen und ist daher kleiner und optimierter.

  • Editor: Diese Binärdatei enthält Editor-Funktionen und ist für den Export von Projekten gedacht. Diese Binärdatei kann für den Betrieb von dedizierten Servern verwendet werden, aber es wird nicht empfohlen, da sie größer und weniger optimiert ist.

Exportansätze

Es gibt zwei Möglichkeiten, ein Projekt für einen Server zu exportieren:

  • Erstellen Sie ein separates Exportprofil für die Plattform, auf der Sie den Server hosten möchten, und exportieren Sie dann Ihr Projekt wie gewohnt.

  • Exportieren Sie nur eine PCK-Datei, vorzugsweise für die Plattform, die mit der Plattform übereinstimmt, auf der Sie den Server hosten werden. Legen Sie diese PCK-Datei in denselben Ordner wie eine Exportvorlagen-Binärdatei, benennen Sie die Binärdatei in denselben Namen wie die PCK-Datei um (ohne die Dateierweiterung) und führen Sie die Binärdatei aus.

Beide Methoden sollten zu einem identischen Ergebnis führen. Der Rest der Seite konzentriert sich auf die erste Methode.

Siehe Projekte exportieren für weitere Informationen.

Exportieren eines Projekts für einen dedizierten Server

Wenn Sie ein Projekt wie üblich exportieren, wenn Sie einen Server als Ziel haben, werden Sie feststellen, dass die PCK-Datei genauso groß ist wie die des Clients. Das liegt daran, dass sie alle Ressourcen enthält, einschließlich derer, die der Server nicht benötigt (wie z.B. Texturdaten). Außerdem wird der Headless-Modus nicht automatisch verwendet; der Benutzer muss --headless angeben, um sicherzustellen, dass kein Fenster erzeugt wird.

Viele Ressourcen, wie z. B. Texturen, können aus der PCK-Datei entfernt werden, um ihre Größe zu verringern. Godot bietet eine Möglichkeit, dies für Texturen und Materialien auf eine Weise zu tun, die Referenzen in Szenen- oder Ressourcendateien (eingebaut oder extern) beibehält.

Um damit zu beginnen, stellen Sie sicher, dass Sie ein spezielles Exportprofil für Ihren Server haben, wählen Sie dieses aus, gehen Sie auf den Ressourcen-Tab und ändern Sie den Exportmodus:

Auswahl des Exportmodus **Export als dedizierter Server** im Exportprofil

Auswahl des Exportmodus Export als dedizierter Server im Exportprofil

Wenn dieser Exportmodus gewählt wird, wird das Feature-Tag dedicated_server automatisch zum exportierten Projekt hinzugefügt.

Bemerkung

Wenn Sie diesen Exportmodus nicht verwenden möchten, aber trotzdem das Feature-Tag haben wollen, können Sie den Namen dedicated_server im Features-Tab des Exportprofils schreiben. Dies wird auch --headless erzwingen, wenn das exportierte Projekt ausgeführt wird.

Nachdem Sie diesen Exportmodus ausgewählt haben, wird Ihnen eine Liste der Ressourcen im Projekt angezeigt:

Auswahl von Ressourcen, die beibehalten, mit gestripptem Bildmaterial versehen oder entfernt werden sollen

Auswahl von Ressourcen, die beibehalten, mit gestripptem Bildmaterial versehen oder entfernt werden sollen

Wenn Sie eine Checkbox ankreuzen, können Sie die Optionen für die angegebene Datei oder den angegebenen Ordner außer Kraft setzen. Das Markieren von Checkboxen hat keine Auswirkung darauf, welche Dateien exportiert werden; dies geschieht stattdessen durch die für jede Chechbox ausgewählten Optionen.

Dateien innerhalb eines markierten Ordners verwenden standardmäßig automatisch die Option des übergeordneten Ordners, was durch das Suffix (Vererbt) für den Optionsnamen angezeigt wird (und dadurch, dass der Optionsname ausgegraut ist). Um die Option für eine Datei zu ändern, deren Option derzeit vererbt wird, müssen Sie zunächst die Checkbox neben der Datei ankreuzen.

  • Strip Visuals: Exportieren Sie diese Ressource, wobei die visuellen Dateien (Texturen und Materialien) durch Platzhalterklassen ersetzt werden. Platzhalterklassen speichern die Bildgröße (da sie manchmal zur Positionierung von Elementen in einer 2D-Szene verwendet wird), aber nichts anderes.

  • Beibehalten: Exportieren Sie diese Ressource wie gewohnt, wobei visuelle Dateien interagieren.

  • Entfernen: Die Datei wird nicht in das PCK aufgenommen. Dies ist nützlich, um Szenen und Ressourcen zu ignorieren, die nur der Client benötigt. Wenn Sie dies tun, stellen Sie sicher, dass der Server diese Client-Only Szenen und Ressourcen in keiner Weise referenziert.

Die allgemeine Empfehlung lautet, Strip Visuals zu verwenden, wann immer dies möglich ist, es sei denn, der Server muss auf Bilddaten wie die Farben der Pixel zugreifen. Wenn Ihr Server z.B. Kollisionsdaten auf der Grundlage des Inhalts eines Bildes generiert, müssen Sie Beibehalten für dieses bestimmte Bild verwenden.

Tipp

Um die Dateistruktur Ihres exportierten PCKs zu überprüfen, benutzen Sie den Export PCK/ZIP...-Button mit einer .zip Dateierweiterung und öffnen Sie die resultierende ZIP-Datei in einem Dateimanager.

Warnung

Seien Sie vorsichtig, wenn Sie den Modus Entfernen verwenden, da Szenen/Ressourcen, die auf eine entfernte Datei verweisen, nicht mehr erfolgreich geladen werden können.

Wenn Sie bestimmte Ressourcen entfernen möchten, die Szenen aber trotzdem ohne sie laden können, müssen Sie die Referenz in der Szenendatei entfernen und die Dateien mit load() in einem Skript in die Propertys der Nodes laden. Dieser Ansatz kann verwendet werden, um Ressourcen zu entfernen, die Godot noch nicht durch Platzhalter ersetzen kann, wie z.B. Audio.

Das Entfernen von Texturen hat oft die größte Auswirkung auf die PCK-Größe, daher wird empfohlen, zunächst bei Strip Visuals zu bleiben.

Bei Verwendung der oben genannten Optionen sieht ein PCK für den Client (der alle Ressourcen normal exportiert) wie folgt aus:

.
├── .godot
│   ├── exported
│   │   └── 133200997
│   │       └── export-78c237d4bfdb4e1d02e0b5f38ddfd8bd-scene.scn
│   ├── global_script_class_cache.cfg
│   ├── imported
│   │   ├── map_data.png-ce840618f399a990343bfc7298195a13.ctex
│   │   ├── music.ogg-fa883da45ae49695a3d022f64e60aee2.oggvorbisstr
│   │   └── sprite.png-7958af25f91bb9dbae43f35388f8e840.ctex
│   └── uid_cache.bin
├── client
│   ├── music.ogg.import
│   └── sprite.png.import
├── server
│   └── map_data.png.import
├── test
│   └── scene.gd
└── unused
│   └── development_test.gd
├── project.binary
├── scene.gd
├── scene.tscn.remap

Die Dateistruktur des PCK für den Server sieht wie folgt aus:

.
├── .godot
│   ├── exported
│   │   └── 3400186661
│   │       ├── export-78c237d4bfdb4e1d02e0b5f38ddfd8bd-scene.scn
│   │       ├── export-7958af25f91bb9dbae43f35388f8e840-sprite.res  # Placeholder texture
│   │       └── export-fa883da45ae49695a3d022f64e60aee2-music.res
│   ├── global_script_class_cache.cfg
│   ├── imported
│   │   └── map_data.png-ce840618f399a990343bfc7298195a13.ctex
│   └── uid_cache.bin
├── client
│   ├── music.ogg.import
│   └── sprite.png.import  # Points to placeholder texture
└── server
│   └── map_data.png.import
├── project.binary
├── scene.gd
├── scene.tscn.remap

Starten des dedizierten Servers

Wenn sowohl Ihr Client als auch Ihr Server Teil desselben Godot-Projekts sind, müssen Sie eine Möglichkeit hinzufügen, den Server direkt über ein Kommandozeilenargument zu starten.

Wenn Sie das Projekt mit dem Exportmodus Export als dedizierter Server exportiert haben (oder dedicated_server als benutzerdefiniertes Feature-Tag hinzugefügt haben), können Sie das Feature-Tag dedicated_server verwenden, um zu erkennen, ob ein PCK für dedizierte Server verwendet wird:

# Note: Feature tags are case-sensitive.
if OS.has_feature("dedicated_server"):
    # Run your server startup code here...
    pass

Wenn Sie auch einen Server hosten wollen, wenn Sie das Built-in---headless Kommandozeilenargument verwenden, können Sie dies tun, indem Sie den folgenden Codeschnipsel in die _ready() Methode Ihrer Hauptszene (oder eines Autoloads) einfügen:

if DisplayServer.get_name() == "headless":
    # Run your server startup code here...
    #
    # Using this check, you can start a dedicated server by running
    # a Godot binary (editor or export template) with the `--headless`
    # command-line argument.
    pass

Wenn Sie ein benutzerdefiniertes Kommandozeilenargument verwenden möchten, können Sie den folgenden Codeschnipsel in die _ready()-Methode Ihrer Hauptszene (oder eines Autoloads) einfügen:

if "--server" in OS.get_cmdline_user_args():
    # Run your server startup code here...
    #
    # Using this check, you can start a dedicated server by running
    # a Godot binary (editor or export template) with the `--server`
    # command-line argument.
    pass

Es ist eine gute Idee, mindestens eines der oben genannten Kommandozeilenargumente zum Starten eines Servers hinzuzufügen, da es dazu verwendet werden kann, die Serverfunktionalität von der Kommandozeile aus zu testen, ohne das Projekt exportieren zu müssen.

Wenn Ihr Client und Ihr Server separate Godot-Projekte sind, sollte Ihr Server höchstwahrscheinlich so konfiguriert sein, dass beim Ausführen der Hauptszene ein Server automatisch gestartet wird.

Nächste Schritte

Unter Linux können Sie einen systemd-Dienst einrichten, damit Ihr dedizierter Server nach einem Absturz oder Systemneustart neu startet. Dadurch können Sie auch die Serverprotokolle auf bequemere Weise anzeigen, wobei systemd für eine automatische Protokollrotation sorgt.

Wenn Sie Erfahrung mit Containern haben, könnten Sie auch erwägen, Ihren dedizierten Server in einen Docker-Container zu verpacken. Auf diese Weise kann er leichter in einer Einrichtung mit automatischer Skalierung verwendet werden (was den Rahmen dieses Tutorials sprengen würde).