🇬🇧 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 із явними параметрами їх
ігнорують повністю.