- الـ Gateway نفسه، و
- العملاء المرئيون للمستخدم والمتصلون بـ Gateway (تطبيق Mac وWebChat وNodes وغيرها)
حقول حالة الحضور (ما يظهر)
إدخالات حالة الحضور هي كائنات منظّمة تتضمن حقولًا مثل: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 (الدور: node)
عندما تتصل Node عبر WebSocket الخاص بـ Gateway باستخدامrole: node،
يُدرج Gateway إدخال حالة حضور لتلك الـNode أو يحدّثه (وفق التدفق نفسه المتّبع مع عملاء WS الآخرين).
قواعد الدمج وإزالة التكرار (سبب أهمية instanceId)
تُخزّن إدخالات حالة الحضور في خريطة واحدة داخل الذاكرة، وتكون مفاتيحها غير حساسة لحالة الأحرف
استنادًا إلى أول قيمة متاحة بالترتيب التالي: معرّف جهاز مقترن، ثم connect.client.instanceId،
ثم معرّف كل اتصال كحل أخير.
يُستبعد عملاء مستوى التحكم المؤقتون من التتبّع بالكامل (راجع
أعلاه)، لذلك لا تصبح معرّفات اتصالاتهم مفاتيح مطلقًا. أما لكل عميل آخر، فيعني
استخدام معرّف الاتصال كحل احتياطي أن العميل الذي يعيد الاتصال من دون
instanceId ثابت يظهر كصف مكرر.
TTL والحجم المحدود
حالة الحضور مؤقتة بطبيعتها:- TTL: تُزال الإدخالات التي يزيد عمرها على 5 دقائق
- الحد الأقصى للإدخالات: 200 (تُحذف الأقدم أولًا)
تنبيه بشأن الاتصال البعيد/النفق (عناوين IP للحلقة المحلية)
عندما يتصل عميل عبر نفق SSH أو إعادة توجيه منفذ محلي، قد يرى Gateway العنوان البعيد على أنه127.0.0.1. ولتجنّب تسجيل عنوان النفق
هذا باعتباره عنوان IP للعميل، تحذف معالجة الاتصال ip بالكامل
للعملاء المكتشفين محليًا (الحلقة المحلية)، بدلًا من كتابة عنوان الحلقة المحلية
في الإدخال.
الجهات المستهلكة
صفحة الأجهزة في واجهة التحكم
تربط صفحة الأجهزةsystem-presence بسجلات الاقتران وNode
الدائمة. وتثبّت الإشارة الذاتية لـGateway أولًا، كما تستخدم معرّفات الجهاز أو
المثيل المتطابقة لبيانات المنصة والإصدار والطراز وحداثة الإدخال المباشرة.
علامة تبويب المثيلات في macOS
يعرض تطبيق macOS ناتجsystem-presence ويطبّق مؤشر حالة صغيرًا
(نشط/خامل/قديم) استنادًا إلى عمر آخر تحديث.
نصائح تصحيح الأخطاء
- لعرض القائمة الأولية، استدعِ
system-presenceعلى Gateway. - إذا ظهرت إدخالات مكررة:
- تأكّد من أن العملاء يرسلون
client.instanceIdثابتًا في المصافحة - تأكّد من أن الإشارات الدورية تستخدم
instanceIdنفسه - تحقّق مما إذا كان الإدخال المشتق من الاتصال يفتقد
instanceId(يُتوقع ظهور التكرارات)
- تأكّد من أن العملاء يرسلون
ذو صلة
حالة حضور الكمبيوتر النشط
كيفية استخدام الإدخال الفعلي على Mac لتحديد Node نشطة وتوجيه تنبيهات الاتصال.
مؤشرات الكتابة
متى تُرسل مؤشرات الكتابة وكيفية ضبطها.
البث والتقسيم إلى أجزاء
البث الصادر والتقسيم إلى أجزاء والتنسيق الخاص بكل قناة.
بنية Gateway
مكوّنات Gateway وبروتوكول WebSocket الذي يدير تحديثات حالة الحضور.
بروتوكول Gateway
بروتوكول الاتصال عبر الشبكة لـ
connect وsystem-event وsystem-presence.