Skip to content

🇬🇧 English | 🇺🇦 Українська

← До змісту

3. Налаштування


Сторінка налаштувань проєкту

Project Settings → Plugins → NATS Messaging Client

Це основне місце конфігурації — підсистема (рекомендований вхід до плагіна, див. 5. Основний обмін повідомленнями) читає ці значення щоразу при виклику Connect To Server. Значення зберігаються у DefaultGame.ini — тобто потрапляють у систему контролю версій і в зібрану гру.

З'єднання

Поле За замовчуванням Опис
Server URL 127.0.0.1 IP-адреса або ім'я хоста, наприклад nats.example.com. Без схеми (nats://) і без порту
Port 4222 TCP-порт сервера. 4222 — стандартний порт NATS
Client Name UnrealEngine Ім'я, під яким клієнт видно в моніторингу сервера (nats-top, /varz) і в його логах. Зручно для розрізнення кількох клієнтів: наприклад "GameServer-1", "LobbyService"
Credentials AuthType = None Спосіб автентифікації — див. нижче

Про Credentials на цій сторінці: вони потрапляють у білд гри, у відкритому вигляді. Усе, що вписано в Credentials тут, зберігається у DefaultGame.ini і їде разом зі збіркою, як звичайний текстовий файл. Для локальної розробки чи сервера без чутливих даних це не проблема. Для продакшн-облікових даних (пароль, постійний токен) є два безпечніших шляхи: редакторський оверрайд, щоб узагалі не тримати секрет у Credentials цієї сторінки, — нижче, — або отримувати їх під час виконання й передавати Connect With Credentials, як показано в розділі «Де задати облікові дані».

Про Server URL. Можна вказати і IP-адресу, і ім'я хоста — плагін сам розв'яже ім'я. TLS-з'єднання (tls://) наразі не підтримуються — детальніше в «Чого немає».

Перепідключення

Поле За замовчуванням Опис
b Auto Reconnect true Чи намагатися підключитися знову після розриву зв'язку
Reconnect Interval Seconds 5.0 Пауза між спробами, від 1 до 60 секунд

Коли On Disconnected спрацьовує не через ваш власний виклик Disconnect, підсистема сама починає повторювати спроби підключення до того самого сервера, до якого підключалися востаннє (не обов'язково того, що записаний тут, якщо ви підключалися викликом Connect з іншою адресою). Якщо b Auto Reconnect вимкнено — підключення після розриву доведеться викликати самостійно.

Автопідписка

Поле Опис
Auto Subscribe Subjects Список subject'ів (з підтримкою шаблонів */>), на які підсистема підписується одразу після підключення — до On Connected

Приклад: ["chat.>", "system.notifications"] — підписка на весь чат і на системні сповіщення без жодного виклику Subscribe у ваших графах.

JetStream: автостворення ресурсів

Поле Опис
Auto Create Streams Масив Jet Stream Stream Config — стріми, які підсистема створить (або підтвердить наявність) одразу після того, як JetStream стане доступним
Auto Create KV Buckets Те саме для бакетів Key-Value

Це декларативний спосіб гарантувати, що потрібна інфраструктура існує до того, як ваша ігрова логіка почне нею користуватися — не треба розкидати Create Stream по коду. Якщо стрім/бакет із такою конфігурацією вже є — він просто повторно використовується, помилки не буде. Повний опис полів конфігурації — у 7. JetStream: стріми та 10. JetStream: Key-Value.

Якщо на сервері немає JetStream, ці два поля просто ігноруються — помилка потрапляє в лог, але підключення в режимі Core працює як завжди.


Облікові дані

FNats Credentials — одна структура на всі чотири способи автентифікації, і в підсистемі, і в компоненті, і напряму в UNatsClient. У редакторі поля структури самі ховаються залежно від обраного Auth Type — заповнювати треба лише те, що справді використовується.

Auth Type Які поля заповнювати Коли застосовний
None — Локальна розробка, сервер без авторизації, або доступ обмежено мережевим рівнем (файрвол)
Basic Username, Password Сервер налаштований на прості облікові записи
Token Token Один спільний секрет для всіх клієнтів — простіше за Basic, бо не потрібне ім'я користувача
JWT JWTToken Токен видає ваша власна система автентифікації (бекенд, auth-сервіс)

Про JWT: важливий нюанс. Плагін передає значення JWTToken як є, у полі jwt команди CONNECT, — і на цьому все. Він не реалізує повний децентралізований NATS-протокол автентифікації через NKey (підписування nonce-виклику сервера приватним ключем). Це підходить для серверів, налаштованих приймати JWT напряму — наприклад, через auth callout або власний проксі-шар авторизації, — але не для «класичного» NATS-акаунта, що вимагає підпису NKey. Якщо ваш сервер саме такий, автентифікація потребуватиме доробки на боці клієнта.

Де задати облікові дані

Є три рівносильні місця — оберіть одне, залежно від того, звідки природно приходять дані.

1. Project Settings (вище) — якщо облікові дані відомі на етапі розробки й однакові для всіх запусків.

2. Компонент актора — поле Nats Credentials на NATS Client Component, якщо підключення прив'язане до конкретного актора з власними обліковими даними.

3. Код, у момент підключення — коли дані приходять ззовні (наприклад, після логіну гравця на вашому бекенді):

[отримали токен від бекенда після логіну]
   │
   └─► Make Nats Credentials
          Auth Type : Token
          Token     : (з відповіді бекенда)
          │
          └─► Get Game Instance Subsystem (Nats Client Subsystem)
                 │
                 └─► Connect With Credentials
                        Server URL   : "nats.mygame.com"
                        Port         : 4222
                        In Credentials : (зверху)

C++:

FNatsCredentials Credentials;
Credentials.AuthType = ENatsAuthType::Token;
Credentials.Token = TokenFromBackend;

UNatsClientSubsystem* Nats = GetGameInstance()->GetSubsystem<UNatsClientSubsystem>();
Nats->ConnectWithCredentials(TEXT("nats.mygame.com"), 4222, Credentials);

Є ще Set Credentials — запам'ятовує дані для наступного підключення, не чіпаючи поточне. Викликати без наступного Connect/Connect To Server сенсу не має:

Nats->SetCredentials(NewCredentials);
Nats->Disconnect(TEXT("Смена облікових даних"));
Nats->ConnectToServer(); // тепер уже з новими обліковими даними

Editor Only облікові дані (для тестування)

Editor Preferences → Plugins → NATS Messaging Client (Editor Only) — окрема сторінка поруч з основною, для тестування в редакторі з реальними обліковими даними без ризику закомітити їх у DefaultGame.ini.

Поле Опис
b Use Editor Credentials Вимикач. Вимкнено — усе працює як завжди, основна сторінка
Credentials Той самий тип структури, що й на основній сторінці — усі чотири способи автентифікації

Повний розбір — чому це безпечно, на що саме впливає (і на що ні), і що робити для продакшн-гри чи виділеного сервера, де секрет не можна тримати навіть тут, — окремий розділ 4. Облікові дані: як не зберігати секрети в клієнті.


Компонент: NATS Client Component

Альтернатива підсистемі — коли з'єднання логічно прив'язане до конкретного актора, а не до всієї гри (детальніше про вибір між ними — 5. Основний обмін повідомленнями). Додайте компонент на актора — у деталях з'явиться категорія NATS Settings:

Поле За замовчуванням Опис
Server Address 127.0.0.1 Те саме, що Server URL підсистеми, але тільки для цього компонента
Server Port 4222 —
Nats Credentials AuthType = None —
Auto Subscribe Subjects порожньо Те саме, що на сторінці налаштувань, але тільки для цього компонента
b Auto Reconnect true —
Reconnect Delay 5.0 Пауза між спробами перепідключення, секунди

Компонент не читає сторінку Project Settings — усі значення налаштовуються тут окремо, і відрізняються за замовчуванням від підсистеми (ReconnectDelay компонента — незалежне поле, не пов'язане з Reconnect Interval Seconds підсистеми).


Змінити налаштування під час гри

Нічого з описаного вище не потребує перезапуску гри, якщо міняти значення кодом, а не через Project Settings:

const UNatsClientSettings* Settings = GetDefault<UNatsClientSettings>();
// Settings доступні лише для читання за замовчуванням значень —
// для зміни поточного з'єднання викликайте ConnectWithCredentials/SetCredentials,
// як показано вище.

Сама сторінка Project Settings задає лише значення за замовчуванням, які читає Connect To Server. Виклики Connect/Connect With Credentials із явними параметрами їх ігнорують повністю.


Далі: 4. Облікові дані: як не зберігати секрети в клієнті