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.

Експорт для виділених серверів

Якщо ви хочете запустити виділений сервер для свого проекту на комп’ютері, який не має графічного процесора чи сервера відображення, вам потрібно буде запустити Godot з headless дисплейний сервер і Dummy audio driver.

Починаючи з Godot 4.0, це можна зробити, запустивши двійковий файл Godot на будь-якій платформі з аргументом командного рядка --headless або запустивши проект, експортований як виділений сервер. Вам більше не потрібно використовувати спеціалізований бінарний файл сервера, на відміну від Godot 3.x.

Редактор проти шаблону експорту

Можна використовувати або редактор, або експортувати двійковий файл шаблону (налагодження чи випуску) у безголовому режимі. Який з них слід використовувати, залежить від вашого випадку використання:

  • Шаблон експорту: Використовуйте цей для запуску виділених серверів. Він не містить функцій редактора, тому є меншим і оптимізованішим.

  • Редактор: Цей двійковий файл містить функції редактора та призначений для використання для експорту проектів. Цей двійковий файл можна використовувати для запуску виділених серверів, але не рекомендується, оскільки він більший і менш оптимізований.

Експортні підходи

Є два способи експорту проєкту на сервер:

  • Створіть окремий стиль експорту для платформи, на якій буде розміщено сервер, а потім експортуйте свій проект як зазвичай.

  • Експортуйте лише файл PCK, бажано для платформи, яка відповідає платформі, на якій розміщено сервер. Помістіть цей файл PCK у ту саму папку, що й двійковий файл шаблону експорту, перейменуйте двійковий файл, щоб він мав таке ж ім’я, як і PCK (без розширення файлу), а потім запустіть двійковий файл.

Результатом обох методів має бути ідентичний результат. Решта сторінки буде зосереджено на першому підході.

Додаткову інформацію дивіться в Експортування проєктів.

Експорт проекту для виділеного сервера

Якщо ви експортуєте проект, як зазвичай, орієнтуючись на сервер, ви помітите, що файл PCK такий самий великий, як і для клієнта. Це тому, що він включає всі ресурси, включно з тими, які серверу не потрібні (наприклад, дані текстур). Крім того, безголовий режим не використовуватиметься автоматично; користувач повинен буде вказати --headless, щоб переконатися, що вікно не породжується.

Багато ресурсів, таких як текстури, можна видалити з файлу PCK, щоб значно зменшити його розмір. Godot пропонує спосіб зробити це для текстур і матеріалів таким чином, щоб зберегти посилання у файлах сцен або ресурсів (вбудованих або зовнішніх).

Щоб почати це робити, переконайтеся, що у вас є спеціальні налаштування експорту для вашого сервера, потім виберіть його, перейдіть на вкладку Ресурси і змініть режим експорту:

Вибір режиму експорту **Експорт як виділений сервер** у попередньому налаштуванні експорту

Вибір режиму експорту Експорт як виділений сервер у попередньому налаштуванні експорту

Якщо вибрано цей режим експорту, тег функції dedicated_server автоматично додається до експортованого проекту.

Примітка

Якщо ви не бажаєте використовувати цей режим експорту, але все одно бажаєте тег функції, ви можете написати назву dedicated_server на вкладці Features попереднього налаштування експорту. Це також спричинить --headless під час запуску експортованого проекту.

Після вибору цього режиму експорту вам буде запропоновано список ресурсів у проекті:

Вибір ресурсів для збереження, збереження без візуальних елементів або видалення

Вибір ресурсів для збереження, збереження без візуальних елементів або видалення

Установивши прапорець, ви можете змінити параметри для вказаного файлу чи папки. Прапорці не впливають на те, які файли експортуються; це робиться за допомогою параметрів, вибраних для кожного прапорця.

Файли в межах позначеної папки автоматично використовуватимуть батьківський параметр за замовчуванням, який позначається суфіксом (Inherited) для назви параметра (і назва параметра неактивна). Щоб змінити параметр для файлу, параметр якого наразі успадкований, ви повинні спочатку поставити прапорець біля нього.

  • Відрізні візуальні елементи: Експортуйте цей ресурс із візуальними файлами (текстурами та матеріалами), заміненими класами-заповнювачами. Класи-заповнювачі зберігають розмір зображення (оскільки його іноді використовують для позиціонування елементів у 2D-сцені), але більше нічого.

  • Зберегти: Експортуйте цей ресурс, як зазвичай, із збереженням візуальних файлів.

  • Видалити: файл не включено до PCK. Це корисно, щоб ігнорувати сцени та ресурси, які потрібні лише клієнту. Якщо ви це зробите, переконайтеся, що сервер жодним чином не посилається на ці клієнтські сцени та ресурси.

Загальна рекомендація полягає в тому, щоб використовувати Strip Visuals, коли це можливо, якщо сервер не потребує доступу до даних зображення, таких як кольори пікселів. Наприклад, якщо ваш сервер генерує дані про зіткнення на основі вмісту зображення, вам потрібно використовувати Keep для цього конкретного зображення.

Порада

Щоб перевірити файлову структуру вашого експортованого PCK, скористайтеся кнопкою Експортувати PCK/ZIP... із розширенням файлу .zip, а потім відкрийте отриманий файл ZIP у файловому менеджері.

Попередження

Будьте обережні, використовуючи режим Видалити, оскільки сцени/ресурси, які посилаються на видалений файл, більше не зможуть успішно завантажитися.

Якщо ви хочете видалити певні ресурси, але зробити так, щоб сцени могли завантажуватися без них, вам доведеться видалити посилання у файлі сцени та завантажити файли у властивості вузлів за допомогою load() у скрипта. Цей підхід можна використовувати для видалення ресурсів, які Godot ще не підтримує, замінюючи заповнювачами, наприклад аудіо.

Видалення текстур часто найбільше впливає на розмір PCK, тому спочатку рекомендується використовувати Strip Visuals.

З використанням наведених вище параметрів PCK для клієнта (який зазвичай експортує всі ресурси) виглядатиме так:

.
├── .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

Файлова структура PCK для сервера виглядатиме так:

.
├── .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

Запуск виділеного сервера

Якщо ваш клієнт і сервер є частиною одного проекту Godot, вам доведеться додати спосіб безпосереднього запуску сервера за допомогою аргументу командного рядка.

Якщо ви exported the project за допомогою режиму експорту Експортувати як виділений сервер (або додали dedicated_server як спеціальний тег функції), ви можете використовувати dedicated_server тег функції для визначення того, чи використовується PCK виділеного сервера:

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

Якщо ви також бажаєте розмістити сервер із використанням вбудованого аргументу командного рядка --headless, це можна зробити, додавши наступний фрагмент коду до основної сцени (або автозавантаження) _ready( ) метод:

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

Якщо ви бажаєте використовувати спеціальний аргумент командного рядка, це можна зробити, додавши наступний фрагмент коду в метод _ready() основної сцени (або автозавантаження):

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

Бажано додати принаймні один із наведених вище аргументів командного рядка, щоб запустити сервер, оскільки його можна використовувати для перевірки функціональності сервера з командного рядка без необхідності експортувати проект.

Якщо ваш клієнт і сервер - це окремі проєкти Godot, ваш сервер, швидше за все, повинен бути налаштований таким чином, щоб при запуску основної сцени автоматично запускався сервер.

Наступні кроки

У Linux, щоб перезавантажити ваш виділений сервер після збою або перезавантаження системи, ви можете створити службу systemd. Це також дозволяє переглядати журнали сервера зручнішим способом, завдяки автоматичній ротації журналів, що забезпечується systemd. Під час розміщення вашого проекту як служби systemd слід також увімкнути параметр проекту application/run/flush_stdout_on_print. Таким чином, journald (служба ведення журналів systemd) може збирати журнали під час виконання процесу.

Якщо у вас є досвід роботи з контейнерами, ви можете також обгортати виділений сервер у контейнер Docker. Таким чином, його можна легше використовувати в автоматичному налаштуванні масштабування (що виходить за рамки цього посібника).