- chính Gateway, và
- các máy khách hiển thị với người dùng được kết nối với Gateway (ứng dụng Mac, WebChat, các node, v.v.)
Các trường presence (nội dung hiển thị)
Các mục presence là những đối tượng có cấu trúc với các trường như:instanceId(không bắt buộc nhưng rất nên dùng): danh tính máy khách ổn định (thường làconnect.client.instanceId)host: tên máy chủ thân thiện với người dùngip: địa chỉ IP theo khả năng xác định tốt nhấtversion: chuỗi phiên bản máy kháchdeviceFamily/modelIdentifier: thông tin gợi ý về phần cứngmode:ui,webchat,cli,backend,node,probe,testlastInputSeconds: số giây kể từ lần nhập liệu gần nhất của người dùng, nếu biếtreason: chuỗi tự do do máy khách cung cấp; bản thân Gateway chỉ phátself,connectvàdisconnectdeviceId,roles,scopes: danh tính thiết bị và thông tin gợi ý về vai trò/phạm vi từ quá trình bắt tay kết nốits: dấu thời gian cập nhật gần nhất (ms kể từ epoch)
Nguồn tạo (presence đến từ đâu)
Các mục presence được tạo từ nhiều nguồn và được hợp nhất.1) Mục của chính Gateway
Gateway luôn khởi tạo một mục “self” khi khởi động để giao diện người dùng hiển thị máy chủ gateway ngay cả trước khi có bất kỳ máy khách nào kết nối.2) Kết nối WebSocket
Mọi máy khách WS đều bắt đầu bằng một yêu cầuconnect. Sau khi bắt tay thành công,
Gateway chèn hoặc cập nhật một mục presence cho kết nối đó.
Vì sao các kết nối mặt phẳng điều khiển tạm thời không xuất hiện
Các lệnh CLI, máy khách RPC phía backend và các tác vụ thăm dò thường chỉ kết nối trong thời gian ngắn. Để tránh duy trì các biến động đó trong toàn bộ TTL của presence, các máy khách ở chế độcli, backend
hoặc probe không được chuyển thành mục presence. Máy khách ở chế độ kiểm thử
vẫn được theo dõi vì các bộ kiểm thử dùng chúng để đại diện cho máy khách thực.
3) Beacon system-event
Máy khách có thể gửi các beacon định kỳ giàu thông tin hơn qua phương thức system-event. Ứng dụng Mac
dùng phương thức này để báo cáo tên máy chủ, IP và lastInputSeconds.
4) Kết nối node (vai trò: node)
Khi một node kết nối qua WebSocket của Gateway bằngrole: node, Gateway
chèn hoặc cập nhật một mục presence cho node đó (cùng luồng với các máy khách WS khác).
Quy tắc hợp nhất + loại bỏ trùng lặp (vì sao instanceId quan trọng)
Các mục presence được lưu trong một map duy nhất trên bộ nhớ, với khóa không phân biệt chữ hoa chữ thường
là giá trị khả dụng đầu tiên theo thứ tự sau: mã thiết bị đã ghép đôi, connect.client.instanceId,
hoặc mã riêng của từng kết nối như phương án cuối cùng.
Các máy khách mặt phẳng điều khiển tạm thời bị loại hoàn toàn khỏi quá trình theo dõi (xem
phần trên), nên mã kết nối của chúng không bao giờ trở thành khóa. Với mọi máy khách khác, việc dùng
mã kết nối làm phương án dự phòng có nghĩa là một máy khách kết nối lại mà không có
instanceId ổn định sẽ xuất hiện dưới dạng một hàng trùng lặp.
TTL và giới hạn kích thước
Presence được thiết kế có tính tạm thời:- TTL: các mục cũ hơn 5 phút sẽ bị loại bỏ
- Số mục tối đa: 200 (mục cũ nhất bị loại trước)
Lưu ý về kết nối từ xa/đường hầm (IP loopback)
Khi máy khách kết nối qua đường hầm SSH / chuyển tiếp cổng cục bộ, Gateway có thể thấy địa chỉ từ xa là127.0.0.1. Để tránh ghi địa chỉ đường hầm đó
làm IP của máy khách, quá trình xử lý kết nối sẽ bỏ hoàn toàn ip đối với
các máy khách được phát hiện là cục bộ (loopback), thay vì ghi địa chỉ loopback
vào mục.
Bên sử dụng
Trang Devices của Control UI
Trang Devices kết hợpsystem-presence với các bản ghi ghép đôi và node
bền vững. Trang này ghim beacon của chính Gateway ở đầu và dùng mã thiết bị hoặc
mã phiên bản tương ứng để hiển thị siêu dữ liệu trực tiếp về nền tảng, phiên bản, kiểu máy và thời gian kể từ lần nhập liệu gần nhất.
Tab Instances trên macOS
Ứng dụng macOS hiển thị đầu ra củasystem-presence và áp dụng một chỉ báo trạng thái nhỏ
(Active/Idle/Stale) dựa trên thời gian đã trôi qua kể từ lần cập nhật gần nhất.
Mẹo gỡ lỗi
- Để xem danh sách thô, hãy gọi
system-presenceđến Gateway. - Nếu thấy các mục trùng lặp:
- xác nhận máy khách gửi một
client.instanceIdổn định trong quá trình bắt tay - xác nhận các beacon định kỳ sử dụng cùng một
instanceId - kiểm tra xem mục được tạo từ kết nối có thiếu
instanceIdhay không (trùng lặp là điều dự kiến)
- xác nhận máy khách gửi một
Liên quan
Presence của máy tính đang hoạt động
Cách thao tác nhập liệu vật lý trên máy Mac chọn một node đang hoạt động và định tuyến cảnh báo kết nối.
Chỉ báo đang nhập
Thời điểm gửi chỉ báo đang nhập và cách tinh chỉnh chúng.
Truyền phát và chia khối
Truyền phát đi, chia khối và định dạng theo từng kênh.
Kiến trúc Gateway
Các thành phần Gateway và giao thức WebSocket điều khiển việc cập nhật presence.
Giao thức Gateway
Giao thức truyền dẫn cho
connect, system-event và system-presence.