Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
Esportare per i server dedicati
Se vuoi gestire un server dedicato per il tuo progetto su una macchina che non ha una GPU o un server di visualizzazione, dovrai eseguire Godot con il server di visualizzazione headless e il driver audio Dummy.
A partire da Godot 4.0, questo si può fare eseguendo un file binario di Godot su qualsiasi piattaforma con l'argomento da riga di comando --headless oppure eseguendo un progetto esportato come server dedicato. Non è più necessario utilizzare un binario server specializzato, a differenza di Godot 3.x.
Editor contro modello di esportazione
In modalità headless è possibile utilizzare un file binario dell'editor o di un modello di esportazione (debug o rilascio). La scelta dipende dal caso d'uso:
Modello di esportazione: utilizzalo per eseguire server dedicati. Non include funzionalità dell'editor ed è quindi più piccolo e ottimizzato.
Editor: questo file binario contiene funzionalità dell'editor ed è destinato all'uso per esportare progetti. Questo file binario si può utilizzare per eseguire server dedicati, ma non è consigliato in quanto è più grande e meno ottimizzato.
Approcci all'esportazione
Ci sono due modi per esportare un progetto per un server:
Crea una preimpostazione di esportazione separata per la piattaforma che ospiterà il server, quindi esporta il progetto come sempre.
Esporta solo un file PCK, preferibilmente per la piattaforma che corrisponde a quella che ospiterà il server. Posiziona questo file PCK nella stessa cartella del file binario del modello di esportazione, rinomina il file binario con lo stesso nome del PCK (senza l'estensione), poi esegui il file binario.
Entrambi i metodi dovrebbero produrre risultati identici. Il resto della pagina si concentrerà sul primo approccio.
Vedi Esportazione di progetti per maggiori informazioni.
Esportazione di un progetto per un server dedicato
Se si esporta un progetto come sempre inteso per un server, si noterà che il file PCK ha le stesse dimensioni di quello per il client. Questo perché include tutte le risorse, comprese quelle non necessarie al server (come i dati delle texture). Inoltre, la modalità headless non verrà utilizzata automaticamente; l'utente dovrà specificare --headless per assicurarsi che nessuna finestra venga generata.
È possibile rimuovere molte risorse, come le texture, dal file PCK per ridurne notevolmente le dimensioni. Godot offre un modo per farlo per texture e materiali, preservando i riferimenti nei file di scena o di risorse (integrati o esterni).
Per iniziare, assicurati di avere una preimpostazione di esportazione dedicata per il tuo server, quindi selezionala, vai alla sua scheda Risorse e cambia la modalità di esportazione:
Scegliere la modalità di esportazione Esporta come server dedicato nella preimpostazione di esportazione
Quando si sceglie questa modalità di esportazione, il tag di funzionalità dedicated_server viene aggiunto automaticamente al progetto esportato.
Nota
Se non si desidera utilizzare questa modalità di esportazione ma si desidera comunque il tag di funzionalità, è possibile inserire il nome dedicated_server nella scheda Funzionalità della preimpostazione di esportazione. In questo modo verrà anche forzata l'opzione --headless durante l'esecuzione del progetto esportato.
Dopo aver selezionato questa modalità di esportazione, apparirà un elenco delle risorse presenti nel progetto:
Scegliere le risorse da mantenere, da mantenere ma prive di visuali, o da rimuovere
Spuntando una casella è possibile sovrascrivere opzioni per il file o la cartella specificati. Spuntare le caselle non influisce su quali file vengono esportati; questa scelta è determinata dalle opzioni selezionate per ciascuna casella.
I file dentro una cartella spuntata utilizzeranno automaticamente come predefinito l'opzione della cartella padre, indicata dal suffisso (Ereditato) accanto al nome dell'opzione (e dal nome dell'opzione colorata in grigio). Per cambiare l'opzione di un file la cui opzione è attualmente ereditata, è necessario prima spuntare la casella corrispondente.
Rimuovi visuali: esporta questa risorsa, sostituendo i file visivi (texture e materiali) con classi segnaposto. Le classi segnaposto memorizzano le dimensioni delle immagini (poiché a volte si utilizzano per posizionare gli elementi in una scena 2D), ma nient'altro.
Mantieni: esporta questa risorsa come sempre, mantenendo intatti i file visivi.
Rimuovi: il file non viene incluso nel PCK. Questa opzione è utile per ignorare scene e risorse necessarie solo al client. In tal caso, assicurarsi che il server non faccia riferimento in alcun modo a queste scene e risorse esclusive al client.
The general recommendation is to use Strip Visuals whenever possible, unless the server needs to access image data such as pixels' colors. For example, if your server generates collision data based on an image's contents, you need to use Keep for that particular image.
Suggerimento
Per verificare la struttura dei file del file PCK esportato, utilizzare il pulsante Esporta PCK/ZIP... con un file con estensione .zip, quindi aprire il file ZIP risultante in un gestore di file.
Avvertimento
Fare attenzione quando si utilizza la modalità Rimuovi, poiché le scene/risorse che fanno riferimento a un file rimosso non si potranno più caricare correttamente.
Se si desidera rimuovere risorse specifiche ma fare in modo che le scene possano comunque caricarsi senza di esse, sarà necessario rimuovere il riferimento nel file della scena e caricare i file nelle proprietà dei nodi tramite load() in uno script. Questo approccio si può usare per rimuovere risorse che Godot non consente ancora di sostituire con segnaposto, come ad esempio le risorse audio.
Rimuovere le texture è spesso ciò che incide maggiormente sulle dimensioni del file PCK, quindi si consiglia di iniziare con Rimuovi visuali.
Con le opzioni sopra indicate, il PCK per il client (che esporta normalmente tutte le risorse) avrà il seguente aspetto:
.
├── .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
La struttura dei file nel PCK per il server avrà il seguente aspetto:
.
├── .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
Avvio del server dedicato
Se entrambi il client e il server fanno parte dello stesso progetto Godot, sarà necessario aggiungere un modo per avviare il server direttamente tramite un argomento da riga di comando.
Se il progetto è stato esportato utilizzando la modalità di esportazione Esporta come server dedicato (o è stato aggiunto dedicated_server come tag di funzionalità personalizzato), si può usare il tag di funzionalità dedicated_server per rilevare se si sta utilizzato un PCK per server dedicato:
# Note: Feature tags are case-sensitive.
if OS.has_feature("dedicated_server"):
# Run your server startup code here...
pass
// Note: Feature tags are case-sensitive.
if (OS.HasFeature("dedicated_server"))
{
// Run your server startup code here...
}
Se si desidera anche ospitare un server quando si utilizza l'argomento da riga di comando integrato --headless, è possibile farlo aggiungendo il seguente frammento di codice al metodo _ready() della scena principale (o di un autoload):
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
using System.Linq;
if (DisplayServer.GetName() == "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.
}
Se si desidera utilizzare un argomento da riga di comando personalizzato, è possibile farlo aggiungendo il seguente frammento di codice al metodo _ready() della scena principale (o di un autoload):
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
using System.Linq;
if (OS.GetCmdlineUserArgs().Contains("--server"))
{
// 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.
}
È una buona idea aggiungere almeno uno degli argomenti da riga di comando sopra menzionati per avviare un server, in quanto possono servire per testare la funzionalità del server dalla riga di comando senza dover esportare il progetto.
Se il client e il server sono progetti Godot separati, è molto probabile che il server si debba configurare in modo che l'esecuzione della scena principale avvii automaticamente un server.
Next steps
Su Linux, per assicurare che il server dedicato si riavvii dopo un arresto anomalo o un riavvio del sistema, è possibile creare un servizio systemd. Questo permette anche di visualizzare i log del server più convenientemente, grazie alla rotazione automatica dei log fornita da systemd. Quando si rende il progetto ospitabile come servizio systemd, è consigliabile abilitare anche l'impostazione del progetto application/run/flush_stdout_on_print. In questo modo, journald (il servizio di logging di systemd) può raccogliere i log mentre il processo è in esecuzione.
Se si ha esperienza con i container, si potrebbe anche considerare di racchiudere il server dedicato in un container Docker. In questo modo, si può utilizzare più facilmente in una configurazione di ridimensionamento automatico (che è fuori lo scopo di questo tutorial).