- samego Gateway, oraz
- widocznych dla użytkownika klientów połączonych z Gateway (aplikacji na Maca, WebChat, węzłów itp.)
Pola obecności (co jest wyświetlane)
Wpisy obecności są obiektami strukturalnymi zawierającymi między innymi następujące pola:instanceId(opcjonalne, ale zdecydowanie zalecane): stabilna tożsamość klienta (zwykleconnect.client.instanceId)host: przyjazna dla użytkownika nazwa hostaip: adres IP ustalony na podstawie najlepszych dostępnych danychversion: ciąg wersji klientadeviceFamily/modelIdentifier: informacje pomocnicze o sprzęciemode:ui,webchat,cli,backend,node,probe,testlastInputSeconds: liczba sekund od ostatniego działania użytkownika, jeśli jest znanareason: dowolny ciąg dostarczony przez klienta; sam Gateway emituje tylkoself,connectidisconnectdeviceId,roles,scopes: wskazówki dotyczące tożsamości urządzenia oraz roli/zakresu z uzgadniania połączeniats: znacznik czasu ostatniej aktualizacji (ms od epoki)
Źródła (skąd pochodzi obecność)
Wpisy obecności pochodzą z wielu źródeł i są scalane.1) Własny wpis Gateway
Gateway podczas uruchamiania zawsze tworzy własny wpis, aby interfejsy użytkownika wyświetlały host Gateway jeszcze przed połączeniem jakiegokolwiek klienta.2) Połączenie WebSocket
Każdy klient WS rozpoczyna od żądaniaconnect. Po pomyślnym uzgodnieniu
Gateway wstawia lub aktualizuje wpis obecności dla tego połączenia.
Dlaczego efemeryczne połączenia płaszczyzny sterowania nie są wyświetlane
Polecenia CLI, klienci RPC zaplecza i sondy często łączą się tylko na krótko. Aby uniknąć przechowywania tych częstych zmian przez cały czas TTL obecności, klientów w trybiecli, backend
lub probe nie przekształca się we wpisy obecności. Klienci w trybie testowym
pozostają śledzeni, ponieważ zestawy testów używają ich jako zamienników rzeczywistych klientów.
3) Sygnały system-event
Klienci mogą wysyłać bogatsze okresowe sygnały za pomocą metody system-event. Aplikacja na Maca
używa jej do zgłaszania nazwy hosta, adresu IP i lastInputSeconds.
4) Połączenia węzłów (rola: node)
Gdy węzeł łączy się przez WebSocket Gateway zrole: node, Gateway
wstawia lub aktualizuje wpis obecności dla tego węzła (w tym samym procesie co w przypadku innych klientów WS).
Reguły scalania i usuwania duplikatów (dlaczego instanceId ma znaczenie)
Wpisy obecności są przechowywane w jednej mapie w pamięci, z kluczami bez rozróżniania wielkości liter,
wybieranymi kolejno na podstawie pierwszej dostępnej wartości: identyfikatora sparowanego urządzenia, connect.client.instanceId
lub, w ostateczności, identyfikatora poszczególnego połączenia.
Efemeryczni klienci płaszczyzny sterowania są całkowicie wykluczeni ze śledzenia (patrz
wyżej), więc identyfikatory ich połączeń nigdy nie stają się kluczami. W przypadku każdego innego klienta
użycie identyfikatora połączenia jako wartości zastępczej oznacza, że klient ponownie łączący się bez stabilnego
instanceId pojawia się jako zduplikowany wiersz.
TTL i ograniczenie rozmiaru
Obecność jest z założenia efemeryczna:- TTL: wpisy starsze niż 5 minut są usuwane
- Maksymalna liczba wpisów: 200 (najstarsze są usuwane jako pierwsze)
Zastrzeżenie dotyczące połączeń zdalnych/tuneli (adresy IP pętli zwrotnej)
Gdy klient łączy się przez tunel SSH lub lokalne przekierowanie portu, Gateway może widzieć adres zdalny jako127.0.0.1. Aby uniknąć zapisywania adresu tunelu
jako adresu IP klienta, obsługa połączenia całkowicie pomija ip
w przypadku klientów wykrytych jako lokalni (korzystających z pętli zwrotnej), zamiast zapisywać adres pętli zwrotnej
we wpisie.
Odbiorcy
Strona Devices interfejsu Control UI
Strona Devices łączysystem-presence z trwałymi rekordami parowania i węzłów.
Umieszcza własny sygnał Gateway na początku i na podstawie pasujących identyfikatorów urządzenia lub
instancji pozyskuje bieżące metadane platformy, wersji, modelu i czasu od ostatniego działania użytkownika.
Karta Instances w macOS
Aplikacja na macOS renderuje dane wyjściowesystem-presence i stosuje niewielki wskaźnik
stanu (Active/Idle/Stale) na podstawie czasu, który upłynął od ostatniej aktualizacji.
Wskazówki dotyczące debugowania
- Aby zobaczyć nieprzetworzoną listę, wywołaj
system-presencewzględem Gateway. - Jeśli widoczne są duplikaty:
- upewnij się, że klienci wysyłają stabilny
client.instanceIdpodczas uzgadniania połączenia - upewnij się, że okresowe sygnały używają tego samego
instanceId - sprawdź, czy we wpisie pochodzącym z połączenia brakuje
instanceId(duplikaty są wtedy oczekiwane)
- upewnij się, że klienci wysyłają stabilny
Powiązane
Obecność aktywnego komputera
Sposób, w jaki fizyczne działania na Macu wybierają aktywny węzeł i kierują alerty o połączeniach.
Wskaźniki pisania
Kiedy wysyłane są wskaźniki pisania i jak je dostosować.
Strumieniowanie i dzielenie na fragmenty
Wychodzące strumieniowanie, dzielenie na fragmenty i formatowanie zależne od kanału.
Architektura Gateway
Komponenty Gateway i protokół WebSocket obsługujący aktualizacje obecności.
Protokół Gateway
Protokół komunikacji dla
connect, system-event i system-presence.