- самого Gateway та
- видимих користувачеві клієнтів, підключених до Gateway (застосунок для Mac, WebChat, вузли тощо)
Поля присутності (що відображається)
Записи присутності — це структуровані об’єкти з такими полями:instanceId(необов’язкове, але наполегливо рекомендоване): стабільний ідентифікатор клієнта (зазвичайconnect.client.instanceId)host: зрозуміле користувачеві ім’я хостаip: IP-адреса, визначена за принципом найкращих зусильversion: рядок версії клієнтаdeviceFamily/modelIdentifier: відомості про обладнанняmode:ui,webchat,cli,backend,node,probe,testlastInputSeconds: кількість секунд із моменту останнього введення користувача, якщо відомоreason: довільний рядок, наданий клієнтом; сам Gateway надсилає лишеself,connectіdisconnectdeviceId,roles,scopes: ідентифікатор пристрою та відомості про роль і область дії з рукостискання під час підключенняts: часова позначка останнього оновлення (мс від початку епохи)
Джерела (звідки надходять дані про присутність)
Записи присутності створюються кількома джерелами й об’єднуються.1) Власний запис Gateway
Під час запуску Gateway завжди створює власний запис, щоб інтерфейси показували хост Gateway ще до підключення будь-яких клієнтів.2) Підключення WebSocket
Кожен клієнт WS починає із запитуconnect. Після успішного рукостискання
Gateway додає або оновлює запис присутності для цього підключення.
Чому тимчасові підключення площини керування не відображаються
Команди CLI, серверні клієнти RPC і засоби перевірки часто підключаються ненадовго. Щоб не зберігати ці мінливі підключення протягом усього TTL присутності, клієнти в режиміcli, backend
або probe не перетворюються на записи присутності. Клієнти в тестовому режимі
й надалі відстежуються, оскільки набори тестів використовують їх як замінники реальних клієнтів.
3) Сигнали system-event
Клієнти можуть надсилати докладніші періодичні сигнали за допомогою методу system-event. Застосунок
для Mac використовує його, щоб повідомляти ім’я хоста, IP-адресу та lastInputSeconds.
4) Підключення вузлів (роль: node)
Коли вузол підключається через WebSocket Gateway ізrole: node, Gateway
додає або оновлює запис присутності цього вузла (за тією самою схемою, що й для інших клієнтів WS).
Правила об’єднання та усунення дублікатів (чому instanceId має значення)
Записи присутності зберігаються в єдиній мапі в пам’яті з ключами без урахування регістру,
утвореними з першого доступного значення в такому порядку: ідентифікатор спареного пристрою, connect.client.instanceId
або, як крайній варіант, ідентифікатор окремого підключення.
Тимчасові клієнти площини керування повністю виключаються з відстеження (див.
вище), тому ідентифікатори їхніх підключень ніколи не стають ключами. Для всіх інших клієнтів
резервне використання ідентифікатора підключення означає, що клієнт, який повторно підключається без стабільного
instanceId, відображається як дублікат рядка.
TTL та обмежений розмір
Дані про присутність навмисно є тимчасовими:- TTL: записи, старші за 5 хвилин, видаляються
- Максимальна кількість записів: 200 (спочатку видаляються найстаріші)
Застереження щодо віддалених підключень і тунелів (loopback IP-адреси)
Коли клієнт підключається через тунель SSH або локальне перенаправлення порту, Gateway може бачити віддалену адресу як127.0.0.1. Щоб не записувати адресу тунелю
як IP-адресу клієнта, під час обробки підключення поле ip повністю пропускається для
клієнтів, визначених як локальні (loopback), замість записування loopback-адреси
до запису.
Споживачі
Сторінка Devices інтерфейсу керування
Сторінка Devices поєднуєsystem-presence зі збереженими записами
про спарювання та вузли. Вона закріплює власний сигнал Gateway першим і використовує відповідні ідентифікатори
пристрою або екземпляра для актуальних метаданих про платформу, версію, модель і давність введення.
Вкладка Instances у macOS
Застосунок для macOS відображає результатsystem-presence і застосовує невеликий індикатор
стану (Active/Idle/Stale) залежно від давності останнього оновлення.
Поради щодо налагодження
- Щоб переглянути необроблений список, викличте
system-presenceу Gateway. - Якщо відображаються дублікати:
- переконайтеся, що клієнти надсилають стабільний
client.instanceIdпід час рукостискання - переконайтеся, що періодичні сигнали використовують той самий
instanceId - перевірте, чи в записі, отриманому з підключення, відсутній
instanceId(у такому разі дублікати очікувані)
- переконайтеся, що клієнти надсилають стабільний
Пов’язані матеріали
Присутність активного комп’ютера
Як фізичне введення на Mac визначає активний вузол і спрямовує сповіщення про підключення.
Індикатори введення
Коли надсилаються індикатори введення та як їх налаштувати.
Потокове передавання та поділ на фрагменти
Вихідне потокове передавання, поділ на фрагменти та форматування для кожного каналу.
Архітектура Gateway
Компоненти Gateway і протокол WebSocket, що забезпечує оновлення даних про присутність.
Протокол Gateway
Мережевий протокол для
connect, system-event і system-presence.