वेबसॉकेट धाराएँ और घटनाएँ
टीएल; डीआर
कार्य धारा = विश्वसनीय चैनल (WSS) + संक्षेपित ऑफसेट + पहचान घटना + सख्त सीमा और बैकप्रेशर। Do: JWT प्रमाणीकरण, विषयों के लिए प्राधिकरण, दिल की धड़ कन, seq/ऑफसेट + रिज्यूम-टोकन, कम से कम एक बार + डेडअप। स्केल के लिए - उपयोगकर्ता/किरायेदार शार्डिंग, चिपचिपा मार्ग, और कतार (काफ्का/एनएटीएस/रेडिस स्ट्रीम्स) सत्य के स्रोत के रूप में।
1) iGaming व्यावसायिक मामले (क्या हम वास्तव में धारा)
संतुलन/सीमाएं: संतुलन, आरजी सीमा, ताले में तात्कालिक परिवर्तन।
दांव/दौर/परिणाम: पुष्टि, स्थिति, जीत की गणना।
टूर्नामेंट/लीडरबोर्ड: पदों, टाइमर, पुरस्कार कार्यक्रम।
भुगतान: भुगतान/वापसी की स्थिति, केवाईसी/एएमएल झंडे - जैसे सूचनाएं (और आलोचना REST + वेबहूक में बनी हुई है)।
सेवा कार्यक्रम: चैट संदेश, पुश बैनर, सत्र स्थिति, रखरखाव।
2) प्रोटोकॉल और कनेक्शन
केवल WSS (TLS 1। 2+/1. 3). डिफ़ॉल्ट युक्ति/सत्र में अधिकतम 1 सक्रिय कनेक्शन.
पिंग/पोंग: क्लाइंट 20-30 सेकंड की पिंगवेरी भेजता है, प्रतिक्रिया समय 10 सेकंड है। सर्वर 3 लगातार टाइमआउट पर कनेक्शन छोड़ ता है।
संपीड़न: 'परमिसेज-डिफ्लेट', फ्रेम आकार की सीमा (उदाहरण के लिए, ≤ 64 KB)।
पेलोड प्रारूप: आंतरिक/मोबाइल के लिए बाहरी, प्रोटोबुफ/MsgPack के लिए JSON।
3) प्रमाणीकरण और प्राधिकरण
क्वेरी/हेडर ('सेक-वेबसॉकेट-प्रोटोकॉल '/' प्राधिकरण') में JWT हैंडशेक, TTL टोकन शॉर्ट (≤ 15 मिनट), आउट-ऑफ-बैंड (REST) द्वारा ताज़ा।
किरायेदार का दावा है: 'उप', 'किरायेदार', 'स्कोप्स', 'जोखिम _ झंडे'।
विषयों/चैनलों के लिए एसीएल: केवल 'विषयों' की अनुमति देने के लिए सदस्यता लेना (उदाहरण के लिए: 'उपयोगकर्ता: {id}', 'टूर्नामेंट: {id}', 'गेम: {table}')।
टोकन समाप्त होने पर कनेक्शन फिर से बनाना: "सॉफ्ट विंडो" 60 s।
4) सदस्यता मॉडल
क्लाइंट कनेक्ट होने के बाद कमांड भेजता है:json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }
यदि ग्राहक फिर से जुड़ ता है तो 'फिर से शुरू करें' - ऑफसेट (देखें 5)।
सर्वर ack/nack के साथ जवाब देता है, असफल ACL 'reason' के साथ 'nack' में हैं।
5) वितरण गारंटी और सारांश
उद्देश्य: क्लाइंट में कम से कम एक बार प्रति चैनल + पहचान।
प्रत्येक घटना में एक नीरस 'seq' within "भाग" (आमतौर पर उपयोगकर्ता/कमरा) और एक वैश्विक 'इवेंट _ id' for deduplication है।
एक पुन: कनेक्शन के साथ, ग्राहक 'resumme _ for' = अंतिम पुष्टि की गई 'seq' (या 'ऑफसेट' of द ब्रोकर) भेजता है। सर्वर लोड "सत्य के स्रोत" (काफ्का/एनएटीएस/रेडिस स्ट्रीम) से घटनाओं को याद करता है।
यदि अंतराल प्रतिधारण से अधिक है (उदाहरण के लिए, 24 घंटे), सर्वर राज्य का एक 'स्नैपशॉट' और एक नया 'seq' भेजता है।
ग्राहक शब्दार्थ:- 'last _ seq '/' event _ id' in टिकाऊ भंडारण (IndexedDB/Keychain) संग्रहीत करें।
- Dedup 'event _ id' द्वारा, 'seq' के साथ घटनाओं को छोड़ दें, छेद (गैप) auto- 'resync' स्नैपशॉट अनुरोध का पता लगाएं।
6) संदेश योजना (लिफाफा)
json
{
"ts": "2025-11-03T12:34:56. 789Z",
"topic": "user:123",
"seq": "1748852201:987654", // partition:offset
"event_id": "01HF..", // UUID/KSUID
"type": "balance. updated",
"data": { "currency":"EUR", "delta"--5. 00, "balance":125. 37 },
"trace_id": "4e3f.., "//for correlation
"signature": "base64 (hmac (...)) "//optional for partners
}
'टाइप' - डोमेन टैक्सोनॉमी (घटना शब्दकोश देखें)।
पीआईआई/पीसीआई - गेटवे स्तर पर बाहर/मुखौटा।
7) "महंगे" ग्राहकों के खिलाफ बैकप्रेशर, कोटा और सुरक्षा
सर्वर → क्लाइंट: स्लाइडिंग विंडो के साथ प्रति-कनेक्शन भेजने की कतार. "शोर" विषयों के लिए पूर्ण - रीसेटिंग सदस्यता या कोड '1013 '/' नीति _ उल्लंघन' के साथ डिस्कनेक्ट करें।
क्लाइंट → सर्वर: 'subscribe/unsubscribe' (उदाहरण के लिए, ≤ 10/सेकंड), विषय सूची सीमा (≤ 50), न्यूनतम पुनर्वितरण अंतराल पर सीमाएं।
दर आईपी/किरायेदार/कुंजी द्वारा सीमा। विसंगतियाँ - अस्थायी अवरोधन।
प्राथमिकता: महत्वपूर्ण घटनाएं (संतुलन, आरजी-सीमा) - प्राथमिकता कतार।
8) संरक्षण और सुरक्षा
हैंडशेक एंडपॉइंट पर WAF/बॉट प्रोफाइल, ओरिजिन ने सूची की अनुमति दी।
एज गेटवे और स्ट्रीम नोड्स के बीच mTLS।
डॉस सुरक्षा: L4 पर SYN कुकीज़, खुले WS/कीप-लाइव अंतराल की संख्या पर सीमित है।
एंटी-रीप्ले: 5 मिनट के वैध विंडो के साथ वैकल्पिक पेलोड हस्ताक्षर (भागीदारों के लिए) में 'टाइमस्टैम्प'।
किरायेदार अलगाव: भौतिक/तार्किक शार्डिंग, कुंजी/टोकन प्रति-किरायेदार।
9) परिवहन वास्तुकला
गेटवे (किनारे): TLS टर्मिनल, AuthN/Z, कोटा, प्रति पार्टी रूटिंग।
स्ट्रीम नोड्स: 'हैश (user_id)% N' द्वारा चिपचिपा रूटिंग के साथ स्टेटलेस वर्कर्स।
इवेंट ब्रोकर: काफ्का/एनएटीएस/रेडिस स्ट्रीम्स - सत्य और रीप्ले बफर का स्रोत।
राज्य-सेवा: स्नैपशॉट (संतुलन, टूर्नामेंट में स्थिति) स्टोर करता है।
बहु-क्षेत्र: संपत्ति-संपत्ति; निकटतम क्षेत्र द्वारा जीएसएलबी; घर-क्षेत्र लॉगिन पर तय किया गया है; एक फीलर के साथ - दूसरे क्षेत्र से एक "ठंडा" सारांश।
10) आदेश, स्थिरता, पहचान
पार्टी (उपयोगकर्ता/कमरे) के भीतर आदेश की गारंटी है, विश्व स्तर पर नहीं।
स्थिरता: घटना REST प्रतिक्रिया से पहले आ सकती है; UX को एक मध्यवर्ती राज्य (आशावादी UI + सुलह) के साथ रहने में सक्षम होना चाहिए।
पहचान: 'घटना _ id' पुनर्संसाधन क्लाइंट की स्थिति को नहीं बदलता है.
11) त्रुटियां, फिर से जुड़ें और तूफान
समापन कोड: '1000' (सामान्य), '1008' (नीति), '1011' (आंतरिक), '1013' (सर्वर ओवरलोड)।
क्लाइंट घातीय बैकऑफ + जिटर: 1s, 2s, 4s... अधिकतम 30।
बड़े पैमाने पर पुनर्संयोजन ("थंडरिंग झुंड") के दौरान - सर्वर रीड-ओनली के लिए एसएसई फॉलबैक का उपयोग करने के लिए एक संकेत के साथ 'रीट्री _ आफ्टर' और "ग्रे" प्रतिक्रियाएं देता है।
12) नकदी और स्नैपशॉट
प्रत्येक सदस्यता वर्तमान स्थिति के एक स्नैपशॉट के साथ शुरू हो सकती है, फिर डिफ घटनाओं की एक धारा।
डेटा _ वर्जन स्कीमा वर्शनिंग और संगतता (फ़ील्ड एक्सटेंशन क्लाइंट को नहीं तोड़ ता).
13) अवलोकन और एसएलओ
मेट्रिक्स:- कनेक्शन: किरायेदार/क्षेत्र द्वारा सक्रिय, स्थापित/सेकंड
- डिलीवरी: ब्रोकर से क्लाइंट, ड्रॉप-रेट, रेसेंड-रेट तक p50/p95 देरी।
- विश्वसनीयता: स्नैपशॉट, गैप डिटेक्टर के बिना सफल फिर से शुरू होने का हिस्सा।
- त्रुटियां: हैंडशेक पर 4xx/5xx, समापन कोड, सीमा हिट।
- लोड: 'सदस्यता लें' कमांड, कतार आकार, सीपीयू/एनईटी के आरपीएस।
- WS p95 ≤ 500 ms (क्षेत्र के भीतर) की स्थापना।
- एंड-टू-एंड लेटेंसी इवेंट p95 ≤ 300 ms (उपयोगकर्ता-विभाजन)।
- सफलता ≥ 99%, संदेश हानि = 0 (по कम से कम-एक बार) फिर से शुरू करें।
- अपटाइम स्ट्रीम एंडपॉइंट ≥ 99। 95%.
14) स्कीमा और संस्करण प्रबंधन
मालिकों, उदाहरणों और शब्दार्थों के साथ घटनाओं का शब्दकोश।
"सॉफ्ट" विकास: केवल वैकल्पिक क्षेत्रों को जोड़ ना; विलोपन - '@ deprecated' अवधि के बाद।
ग्राहक एसडीके के खिलाफ अनुबंध परीक्षण, JSON स्कीमा/प्रोटोबुफ पर लिंटर।
15) हादसा प्लेबुक (आपकी साझा प्लेबुक में एम्बेड)
विलंबता वृद्धि: पार्टियों को बैकअप नोड्स में स्विच करें, ब्रोकर पर बैच के आकार को बढ़ाएं, महत्वपूर्ण घटनाओं को प्राथमिकता दें।
तूफान को फिर से जोड़ें: 'retry _ after' सक्रिय करें, अस्थायी रूप से हैंडशेक सीमा बढ़ाएं, SSE फॉलबैक सक्षम करें।
टोकन लीक: JWKS रोटेशन, प्रभावित टोकन का निरसन, फिर से ऑथ के साथ फिर से जुड़ ने के लिए मजबूर।
ब्रोकर पार्टी का नुकसान: स्नैपशॉट मोड में स्थानांतरित करें, वसूली के बाद फिर से खेलें।
16) एपीआई मिनी स्पेसिफिकेशन (सरलीकृत)
हैंडशेक (HTTP GET → WS):
GET /ws? tenant=acme&client=web
Headers:
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
क्लाइंट कमांड्स:
json
{ "op":"subscribe", "topics":["user:123"], "resume_from":"1748852201:42" }
{ "op":"unsubscribe", "topics":["user:123"] }
{ "op":"ping", "ts":"2025-11-03T12:34:56Z" }
सर्वर प्रतिक्रियाएँ:
json
{ "op":"ack", "id":"subscribe:user:123" }
{ "op":"event", "topic":"user:123", "seq":"1748852201:43", "type":"balance. updated", "data":{...} }
{ "op":"snapshot", "topic":"user:123", "seq":"1748852201:42", "state":{...} }
{ "op":"error", "code":"acl_denied", "reason":"no access to topic tournament:456" }
{ "op":"pong", "ts":"..." }
17) यूएटी चेकलिस्ट
- क्लाइंट के डाउनटाइम के 1/10/60 मिनट के बाद ऑफसेट से सारांश।
- डेडअप: एक ही 'ईवेंट _ आईडी' की पुनर्वितरण स्थिति नहीं बदलती है।
- गैप डिटेक्टर → स्वचालित 'स्नैपशॉट' और संरेखण।
- कोटा और बैकप्रेशर: लोडेड क्लाइंट पॉलिसी-डिस्कनेक्ट प्राप्त करता है।
- बहुक्षेत्र: ऑफसेट बनाए रखते हुए विफल क्षेत्र।
- सुरक्षा: टोकन रॉकर JWT द्वारा समाप्त हो गया, ACL के बाहर सदस्यता लेने की कोशिश कर रहा है।
- RG/ईवेंट बैलेंस REST के पहले/बाद आता है - UI सही ढंग से "टांके"।
18) बार-बार त्रुटियाँ
कोई 'seq/ऑफसेट' और नवीकरण - घटनाओं और विश्वास खो दें।
WS म्यूटेशन में महत्वपूर्ण भुगतान आदेशों को मिलाना - REST का उपयोग करें।
बैकप्रेशर/कोटा की कमी - "निलंबित" कनेक्शन और स्मृति का एक हिमस्खलन।
वैश्विक व्यवस्था महंगी और अनावश्यक है; पार्टी में पर्याप्त आदेश
घटनाओं में पीआईआई लॉगिंग - गोपनीयता उल्लंघन और पीसीआई/जीडीपीआर।
घटनाओं और वर्शनिंग के एक शब्दकोश का अभाव - ग्राहक टूट जाते हैं।
सारांश
WebSocket धाराएं प्रतिक्रियाशील UX और परिचालन संकेत देती हैं यदि वे एक संक्षेपित, संरक्षित और सीमित चैनल के रूप में निर्मित होते हैं: WSS + mTLS/JWT, ACL L T T, dexiT oF oF ToF TRoF TRRRRoverSowanSouplowanS) सत्य, अवलोकन और एसएलओ की। इसलिए धाराएं उपयोगकर्ता के लिए तेज बनी हुई हैं और प्लेटफॉर्म के लिए प्रबंधनीय हैं - सुरक्षा और धन पर समझौता किए बिना।