- स्वयं Gateway, और
- Gateway से जुड़े क्लाइंट (mac ऐप, WebChat, CLI, आदि)
उपस्थिति फ़ील्ड (क्या दिखाई देता है)
उपस्थिति प्रविष्टियां ऐसे संरचित ऑब्जेक्ट होती हैं जिनमें इस तरह के फ़ील्ड होते हैं:instanceId(वैकल्पिक लेकिन दृढ़ता से अनुशंसित): स्थिर क्लाइंट पहचान (आमतौर परconnect.client.instanceId)host: मनुष्य-पठनीय होस्ट नामip: सर्वोत्तम-प्रयास IP पताversion: क्लाइंट संस्करण स्ट्रिंगdeviceFamily/modelIdentifier: हार्डवेयर संकेतmode:ui,webchat,cli,backend,probe,test,node, …lastInputSeconds: “अंतिम उपयोगकर्ता इनपुट के बाद से सेकंड” (यदि ज्ञात हो)reason:self,connect,node-connected,periodic, …ts: अंतिम अपडेट टाइमस्टैम्प (epoch के बाद से ms)
प्रोड्यूसर (उपस्थिति कहां से आती है)
उपस्थिति प्रविष्टियां कई स्रोतों द्वारा बनाई जाती हैं और मर्ज की जाती हैं।1) Gateway स्वयं प्रविष्टि
Gateway हमेशा स्टार्टअप पर एक “स्वयं” प्रविष्टि सीड करता है ताकि UI किसी भी क्लाइंट के जुड़ने से पहले भी gateway होस्ट दिखाएं।2) WebSocket कनेक्ट
हर WS क्लाइंट एकconnect अनुरोध से शुरू होता है। सफल हैंडशेक पर
Gateway उस कनेक्शन के लिए एक उपस्थिति प्रविष्टि upsert करता है।
एकबारगी CLI कमांड क्यों दिखाई नहीं देते
CLI अक्सर छोटे, एकबारगी कमांड के लिए जुड़ता है। इंस्टेंस सूची को स्पैम होने से बचाने के लिए,client.mode === "cli" को उपस्थिति प्रविष्टि में नहीं बदला जाता।
3) system-event बीकन
क्लाइंट system-event विधि के माध्यम से अधिक समृद्ध आवधिक बीकन भेज सकते हैं। mac
ऐप इसका उपयोग होस्ट नाम, IP, और lastInputSeconds रिपोर्ट करने के लिए करता है।
4) Node कनेक्ट (भूमिका: node)
जब कोई node Gateway WebSocket परrole: node के साथ जुड़ता है, तो Gateway
उस node के लिए एक उपस्थिति प्रविष्टि upsert करता है (अन्य WS क्लाइंट जैसी ही प्रक्रिया)।
मर्ज + डीडुप नियम (instanceId क्यों महत्वपूर्ण है)
उपस्थिति प्रविष्टियां एक एकल इन-मेमोरी मैप में संग्रहीत होती हैं:
- प्रविष्टियां एक उपस्थिति कुंजी द्वारा keyed होती हैं।
- सबसे अच्छी कुंजी एक स्थिर
instanceIdहै (connect.client.instanceIdसे) जो पुनरारंभों के बाद भी बनी रहती है। - कुंजियां केस-असंवेदनशील होती हैं।
instanceId के बिना फिर से जुड़ता है, तो वह
डुप्लिकेट पंक्ति के रूप में दिखाई दे सकता है।
TTL और सीमित आकार
उपस्थिति जानबूझकर अस्थायी है:- TTL: 5 मिनट से पुरानी प्रविष्टियां हटाई जाती हैं
- अधिकतम प्रविष्टियां: 200 (सबसे पुरानी पहले हटाई जाती हैं)
रिमोट/टनल सावधानी (loopback IP)
जब कोई क्लाइंट SSH टनल / local पोर्ट फ़ॉरवर्ड के माध्यम से जुड़ता है, तो Gateway रिमोट पते को127.0.0.1 के रूप में देख सकता है। किसी अच्छे क्लाइंट-रिपोर्ट किए गए
IP को ओवरराइट करने से बचाने के लिए, loopback रिमोट पतों को अनदेखा किया जाता है।
उपभोक्ता
macOS इंस्टेंस टैब
macOS ऐपsystem-presence के आउटपुट को रेंडर करता है और अंतिम अपडेट की उम्र के आधार पर
एक छोटा स्थिति संकेतक (सक्रिय/निष्क्रिय/बासी) लागू करता है।
डीबगिंग सुझाव
- कच्ची सूची देखने के लिए, Gateway के विरुद्ध
system-presenceकॉल करें। - यदि आपको डुप्लिकेट दिखाई दें:
- पुष्टि करें कि क्लाइंट हैंडशेक में एक स्थिर
client.instanceIdभेजते हैं - पुष्टि करें कि आवधिक बीकन वही
instanceIdउपयोग करते हैं - जांचें कि क्या कनेक्शन-व्युत्पन्न प्रविष्टि में
instanceIdनहीं है (डुप्लिकेट अपेक्षित हैं)
- पुष्टि करें कि क्लाइंट हैंडशेक में एक स्थिर
संबंधित
Typing indicators
टाइपिंग संकेतक कब भेजे जाते हैं और उन्हें कैसे ट्यून करें।
Streaming and chunking
आउटबाउंड स्ट्रीमिंग, चंकिंग, और प्रति-चैनल फ़ॉर्मैटिंग।
Gateway architecture
Gateway घटक और WebSocket प्रोटोकॉल जो उपस्थिति अपडेट चलाता है।
Gateway protocol
connect, system-event, और system-presence के लिए वायर प्रोटोकॉल।