GH GambleHub

WebSocket oqimlari va hodisalari

TL; DR

Ish oqimi = ishonchli kanal (WSS) + xulosa chiqariladigan ofsetlar + idempotent hodisalar + qatʼiy limitlar va backpressure. Bajaring: JWT autentifikatsiyasi, topiklar uchun avtorizatsiya, heartbeats, seq/offset + resume-token, at-least-once + dedup. Masshtab uchun - user/tenant, sticky-routing va haqiqat manbai sifatida navbat (Kafka/NATS/Redis Streams).

1) iGaming biznes-keyslari (haqiqiy oqim)

Balans/limitlar: balans, RG limitlari, blokirovkalarning bir zumda o’zgarishi.
Stavkalar/raundlar/natijalar: tasdiqlash, maqom, yutuqlar hisob-kitobi.
Turnirlar/peshqadamlar: pozitsiyalar, taymerlar, sovrinli tadbirlar.
To’lovlar: payout/refund maqomi, KYC/AML bayroqlari - bildirishnoma sifatida (tanqid esa REST + vebxukida qoladi).
Xizmat hodisalari: chat xabarlari, push-bannerlar, sessiya maqomi, maintenance.

2) Protokol va ulanish

Faqat WSS (TLS 1. 2+/1. 3). Andoza moslama/sessiya uchun maksimal 1 aktiv ulanish.
Ping/Pong: mijoz «ping» ni har 20-30 soniyada yuboradi, javob taymauti 10 s. Server ketma-ket 3 taymautda ulanishni bekor qiladi.
Kompresssiya:’permessage-deflate’, kadr hajmiga limit (masalan, 64 KB ≤).
Foydali yuk formati: tashqi JSON, ichki/mobil Protobuf/MsgPack.

3) Autentifikatsiya va avtorizatsiya

Xandsheyk JWT bilan query/header (’Sec-WebSocket-Protocol ’/’ Authorization’), TTL tokenlari qisqa (≤ 15 daqiqa), refresh bo’yicha out-of-band (REST).
Tenant-scoped claims: `sub`, `tenant`, `scopes`, `risk_flags`.
Topiklar/kanallar uchun ACL: faqat ruxsat etilgan’topic’uchun obuna (masalan:’user: {id}’,’tournament: {id}’,’game: {table}’).
Token tugaganida ulanishni qayta tuzish: «yumshoq darcha» 60 s.

4) Obuna modeli

connect buyruqlarini joʻnatadi:
json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }

’resume _ from’ - ofset (§ 5 ga qarang), agar mijoz ulanishni tiklayotgan bo’lsa.
Server ack/nack bilan javob beradi.

5) Yetkazib berish kafolatlari va xulosa

Maqsad: at-least-once + mijozning idempotentligi.

Har bir hodisa «partiya» (odatda user/room) doirasida monoton’seq’va dedup uchun global’event _ id’ga ega.
Re-konnektda mijoz’resume _ from’= oxirgi tasdiqlangan’seq’(yoki’offset’broker) ni uzatadi. Server «haqiqat manbai» (Kafka/NATS/Redis Streams) dan oʻtkazib yuborilgan voqealarni yuklaydi.
Agar lag retention (masalan, 24 soat) dan oshsa, server’snapshot’holatini va yangi’seq’holatini yuboradi.

Mijozning semantikasi:
  • ’last _ seq ’/’ event _ id’ ni durable-saqlovchida (IndexedDB/Keychain) saqlash.
  • ’event _ id’ dedupi,’seq ≤ last_seq'’bilan voqealarni oʻtkazib yuborish, snapshot soʻrovining (gap) → avto-’resync’teshiklarini aniqlash.

6) Xabar sxemasi (envelope)

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
}

’type’ - domen taksonomiyasi (voqealar lugʻatiga qarang).
PII/PCI - chiqarib tashlansin/shlyuz darajasida niqoblansin.

7) Backpressure, kvotalar va «qimmat» mijozlardan himoya qilish

Server → Client: per-connection send-queue. Haddan tashqari gavjum - «shovqinli» topiklarga obuna yoki’1013 ’/’ policy _ violation’kodi bilan disconnect obunalarini olib tashlash.
Client → Server:’subscribe/unsubscribe’uchun limitlar (masalan, ≤ 10/sek), topiklar roʻyxatini cheklash (≤ 50), eng kam takroriy obuna oraligʻi.
IP/tenant/kaliti boʻyicha rate limits. Anomaliyalar → vaqtinchalik blokirovka.
Priority: hayotiy muhim voqealar (balans, RG-limitlar) - ustuvor navbat.

8) Himoya va xavfsizlik

Xendsheyk endpointidagi WAF/bot profili, Origin tomonidan ruxsat etilgan roʻyxat.
edge-shlyuz va strim-tugunlar o’rtasidagi mTLS.
DoS himoyasi: L4 uchun SYN-cookies, ochiq WS soni uchun limitlar/keep-alive oralig’i.
Anti-replay:’timestamp’foydali yukning opsion imzosida (sheriklar uchun) ruxsat etilgan oyna 5 daqiqa.
Ijarachilarni izolyatsiya qilish: jismoniy/mantiqiy shardalash, kalitlar/per-tenant tokenlari.

9) Transport arxitekturasi

Shlyuz (edge): TLS termineyti, authN/Z, kvotalar, partiyaga yo’naltirish.
Stream-uzellar: stateless-vorkerlar sticky-routing bo’yicha’hash (user_id)% N’.
Tadbir brokeri: Kafka/NATS/Redis Streams - haqiqat manbai va belgi-bufer.
State-servis: snapshotlarni saqlaydi (balance, turnirdagi pozitsiyalar).
Multiregion: aktiv-aktiv; eng yaqin mintaqa bo’yicha GSLB; home-region login bilan biriktiriladi; feyloverda - boshqa mintaqadan kelgan «sovuq» rezyum.

10) Tartib, kelishuv, idempotentlik

Partiya ichida tartibga solish kafolatlanadi (user/room), global emas.
Konsistentlik: voqea REST javobidan oldin kelishi mumkin; UX oraliq holat (optimistic UI + reconciliation) bilan yashay olishi kerak.
Idempotentlik: qayta ishlash’event _ id’mijozning holatini o’zgartirmaydi.

11) Xatolar, reconnect va «bo’ron»

Yopish kodlari:’1000’(normal),’1008’(policy),’1011’(internal),’1013’(server overload).
Mijoz eksponensial backoff + jitter: 1s, 2s, 4s... maks 30s.
Ommaviy rekonnektlar («thundering herd») paytida server’retry _ after’va «kulrang» javoblarni read-only uchun SSE fallback yordamida beradi.

12) Kesh va snapshotlar

Har bir obuna dolzarb holat snapshotidan boshlanishi mumkin, so’ngra - diff-hodisalar oqimi.
’data _ version’ sxemasini versionlash va moslashuvchanlik (maydonlarni kengaytirish mijozlarni buzmaydi).

13) Kuzatuv va SLO

Metriklar:
  • Ulanishlar: aktiv, o’rnatilgan/sek, ijarachilar/hududlar bo’yicha taqsimlash.
  • Yetkazib berish: brokerdan mijozgacha kechikishlar p50/p95, drop-rate, resend-rate.
  • Ishonchlilik: snapshotsiz muvaffaqiyatli xulosalar ulushi, gap-detektor.
  • Xatolar: xendsheykda 4xx/5xx, yopilish kodlari, limit-xit.
  • Ish yuki: RPS buyruqlari’subscribe’, navbat oʻlchami, CPU/NET.
SLO koʻrsatkichlari:
  • O’rnatish WS p95 ≤ 500 ms (mintaqa ichida).
  • End-to-end latency hodisa p95 ≤ 300 ms (user-partition).
  • Resume success ≥ 99%, message loss = 0 (по at-least-once).
  • Uptime strim endpoint ≥ 99. 95%.

14) Sxemalar va versiyalarni boshqarish

Sohiblar, misollar va semantika bilan voqealar lugʻati.
«Yumshoq» evolyutsiya: faqat ixtiyoriy maydonlarni qo’shish; olib tashlash - «@deprecated» davrdan keyin.
Mijozlarning SDKlariga qarshi kontrakt testlari, JSON Schema/Protobuf linterlari.

15) Hodisalar pleybuklari (umumiy pleybukingizga kiritish)

Latency o’sishi: partiyalarni zaxira uzellariga o’tkazish, brokerning batch hajmini ko’paytirish, hayotiy muhim voqealarni ustuvorlashtirishni o’z ichiga oladi.
Rekonnektlar bo’roni:’retry _ after’ni faollashtirish, handshake limitlarini vaqtincha oshirish, SSE-follbekni yoqish.
Tokenlarning tarqalishi: JWKS rotatsiyasi, ta’sirlangan tokenlarni qaytarib olish, re-auth bilan majburiy reconnect.
Broker partiyasini yo’qotish: tiklangandan keyin snapshotlar, repleya rejimiga o’tkazish.

16) API mini-spetsifikatsiyasi (soddalashtirilgan)

Handshake (HTTP GET → WS):

GET /ws? tenant=acme&client=web
Headers:
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
Buyruqlar:
json
{ "op":"subscribe",  "topics":["user:123"], "resume_from":"1748852201:42" }
{ "op":"unsubscribe", "topics":["user:123"] }
{ "op":"ping", "ts":"2025-11-03T12:34:56Z" }
Server javoblari:
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) UAT chek-varag’i

  • Mijozning 1/10/60 daqiqadan so’ng ofsetdan olingan rezyum.
  • Dedup: bir’event _ id’ni qayta yetkazib berish holatni oʻzgartirmaydi.
  • Gap-detektor → avtomatik’snapshot’va tekislash.
  • Kvotalar va backpressure: yuklangan mijoz policy-disconnect oladi.
  • Multiregion: offset saqlangan mintaqaning failover.
  • Xavfsizlik: JWT tugagan token-roker, ACLdan tashqarida obuna boʻlishga urinish.
  • RG/hodisa balansi RESTdan oldin/keyin keladi - UI to’g’ri «tikadi».

18) Tez-tez xatolar

Hech qanday’seq/offset’va yangilanish - voqealar va ishonchni yo’qotamiz.
WS mutatsiyalarida tanqidiy to’lov buyruqlarini aralashtirish - REST’dan foydalaning.
Backpressure/kvotalar yo’qligi - «osilgan» ulanishlar va xotira ko’chkisi.
Global tartiblilik - qimmat va kerak emas; partiyada tartib etarli.
PCI/GDPR va maxfiylikning buzilishi.
Voqealar va versiyalash lug’ati yo’qligi - mijozlar buziladi.

Xulosa

WebSocket-strimlar reaktiv UX va tezkor signallarni beradi, agar ular xulosa chiqariladigan, himoyalangan va cheklangan kanal sifatida qurilgan bo’lsa: WSS + mTLS/JWT, ACL uchun topiklar, seq/offset + resume, at-least-once, backpressure/kvotalar, haqiqat manbai sifatida broker, kuzatuv va SLO. Shunday qilib, oqimlar foydalanuvchi uchun tez va platforma uchun boshqariladigan bo’lib qoladi - xavfsizlik va pul bo’yicha murosasiz.

Contact

Biz bilan bog‘laning

Har qanday savol yoki yordam bo‘yicha bizga murojaat qiling.Doimo yordam berishga tayyormiz.

Integratsiyani boshlash

Email — majburiy. Telegram yoki WhatsApp — ixtiyoriy.

Ismingiz ixtiyoriy
Email ixtiyoriy
Mavzu ixtiyoriy
Xabar ixtiyoriy
Telegram ixtiyoriy
@
Agar Telegram qoldirilgan bo‘lsa — javob Email bilan birga o‘sha yerga ham yuboriladi.
WhatsApp ixtiyoriy
Format: mamlakat kodi va raqam (masalan, +998XXXXXXXX).

Yuborish orqali ma'lumotlaringiz qayta ishlanishiga rozilik bildirasiz.