GH GambleHub

WebSocket akymlar we wakalar

TL; DR

Iş akymy = ygtybarly kanal (WSS) + jemlenýän ofsetler + demokratik wakalar + berk çäklendirmeler we backpressure. Ýerine ýetiriň: JWT-tassyklama, topiklere ygtyýarnama, heartbeats, seq/offset + resume-token, at-least-once + dedup. Masştab üçin - hakykat çeşmesi hökmünde user/tenant, sticky-routing we nobat (Kafka/NATS/Redis Streams).

1) iGaming iş halatlary (hakyky akym)

Balans/çäkler: balansyň, RG çäkleriniň, blokirlemeleriň dessine üýtgemegi.
Nyrhlar/tapgyrlar/netijeler: tassyklamak, status, ýeňişleri hasaplamak.
Ýaryşlar/liderbordlar: pozisiýalar, taýmerler, baýrakly wakalar.
Tölegler: töleg/refund statusy, KYC/AML baýdaklary - habarnama hökmünde (tankyt REST webhukide galýar).
Hyzmat wakalary: söhbetdeşlik habarlary, push-bannerler, sessiýanyň ýagdaýlary, maintenance.

2) Teswirnama we birleşme

Diňe WSS (TLS 1. 2+/1. 3). Enjamyňyza/sessiýaňyza iň köp 1 işjeň baglanyşyk.
Ping/Pong: Müşderi her 20-30 sekuntda "ping" iberýär, jogap wagty 10 s. Serwer yzly-yzyna 3 ýarymda baglanyşygy taşlaýar.
Gysyş: 'permessage-deflate', çarçuwanyň ululygyna çäk (mysal üçin ≤ 64 KB).
Peýdaly ýüküň formaty: daşarky JSON, içerki/ykjam üçin Protobuf/MsgPack.

3) Tassyklamak we ygtyýarlandyrmak

JWT-den query/header ('Sec-WebSocket-Protocol '/' Authorization'), TTL gysga (≤ 15 minut), out-of-band (REST) boýunça refresh.
Tenant-scoped claims: `sub`, `tenant`, `scopes`, `risk_flags`.
Topiklere/kanallara ACL: Diňe rugsat berlen 'topic' -lere abuna (mysal üçin: 'user: {id}', 'tournament: {id}', 'game: {table}').
Token gutaranda baglanyşygyň täzeden gurulmagy: "ýumşak penjire" 60 s.

4) Abuna ýazylmagyň nusgasy

Müşderi connect-den soň aşakdaky buýruklary iberýär:
json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }

'resume _ from' - eger müşderi baglanyşygy dikeldýän bolsa, ofset (§ 5 serediň).
Serwer ack/nack jogap berýär.

5) Eltmegiň kepillikleri we jemlemek

Maksat: at-least-once + müşderiniň idempotentligi.

Her bir çäräniň "partiýa" (adatça user/room) çäginde monoton 'seq' we babyň global 'event _ id' bar.
Re-konnektde müşderi 'resume _ from' = iň soňky tassyklanan 'seq' (ýa-da 'offset' broker) geçirýär. Serwer "hakykat çeşmesinden" (Kafka/NATS/Redis Streams) sypdyrylan wakalary ýükleýär.
Eger lag retentiondan ýokary bolsa (mysal üçin, 24 sagat) - serwer 'snapshot' ýagdaýyny we 'seq' -ni iberýär.

Müşderiniň semantikasy:
  • Durable-ammarda 'last _ seq '/' event _ id' saklamak (IndexedDB/Keychain).
  • 'event _ id' dedupy, 'seq ≤ last_seq' bilen wakalary sypdyrmak, snapshot soragynyň deşiklerini (gap) → awto' resync 'tapmak.

6) Habar shemasy (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 taksonomiýasy (Wakalar sözlügine serediň).
PII/PCI - şlýuz derejesinde aýyrmak/gizlemek.

7) Backpressure, kwotalar we "gymmat" müşderilerden goramak

Server → Client: per-connection send-queue Artykmaç - "şowhunly" topiklere ýa-da '1013 '/' policy _ violation' kody bilen disconnect abunalyklaryny täzeden gurmak.
Client → Server: 'subscribe/unsubscribe' -a çäklendirmeler (mysal üçin ≤ 10/sek), topikleriň sanawyny çäklendirmek (≤ 50), iň az gaýtadan ýazylmak aralygy.
IP/tenant/açary boýunça rate limits. Anomaliýalar → Wagtlaýyn blokirleme.
Priority: möhüm wakalar (balans, RG-çäkleri) - ileri tutulýan ugur.

8) Gorag we howpsuzlyk

WAF/bot-profil hendshake-endpoint, rugsat edilen Origin sanawy.
mTLS edge-şlýuz bilen akym düwünleriniň arasynda.
DoS-gorag: L4-de SYN-cookies, açylan WS-leriň sanyna çäkler/keep-alive aralygy.
Anti-replay: 'timestamp' 5 minut rugsat edilýän penjire bilen peýdaly ýüküň (hyzmatdaşlar üçin) opsiýa golunda.
Kärendeçileriň izolýasiýasy: fiziki/logiki tertipleşdirmek, açarlar/per-tenant bellikleri.

9) Ulag arhitekturasy

Şlýuz (edge): TLS termineýti, authN/Z, kwotalar, partiýa ugry.
Akym düwünleri: sticky-routing 'hash (user_id)% N' stateless workers.
Waka brokeri: Kafka/NATS/Redis Streams - hakykat çeşmesi we bellik-bufer.
State-service: snapshotlary saklaýar (balance, ýaryşdaky pozisiýalary).
Köp sebit: aktiw-aktiw; Iň ýakyn sebit boýunça GSLB; home-region login bilen berkidilýär; feýlowerde - başga sebitden gelen "sowuk" rezýume.

10) Tertip, ylalaşyklylyk, idempotentlik

Tertiplilik partiýanyň içinde kepillendirilýär (user/room), global däl.
Yzygiderlilik: waka REST jogabyndan öň gelip biler; UX aralyk ýagdaý (optimistic UI + reconciliation) bilen ýaşap bilmelidir.
Idempotentlik: 'event _ id' gaýtadan işlemek müşderiniň ýagdaýyny üýtgetmeýär.

11) Ýalňyşlyklar, reconnect we "tupan"

Ýapyş kodlary: '1000' (adaty), '1008' (policy), '1011' (internal), '1013' (server overload).
Müşderi eksponenti backoff + jitter: 1s, 2s, 4s... maks 30s.
Köpçülikleýin rekonnektlerde ("thundering herd") - serwer 'retry _ after' we "çal" jogaplary berýär.

12) Nagt pul we snapshotlar

Her abuna ýazylmak häzirki ýagdaýyň snapşotyndan başlap biler, soňra - diff-wakalaryň akymy.
'data _ version' shemasyny wersiýalaşdyrmak we gabat gelmek (meýdanlary giňeltmek müşderileri bozmaýar).

13) Synlamak we SLO

Metrikler:
  • Baglanyşyklar: işjeň, kesgitlenen/sek, kärendeçiler/sebitler boýunça paýlanyş.
  • Eltip bermek: p50/p95 brokerden müşderä çenli gijikdirmeler, drop-rate, resend-rate.
  • Ygtybarlylyk: snapshotsyz üstünlikli netijeleriň paýy, gap-detektor.
  • Ýalňyşlyklar: 4xx/5xx hendşeýkada, ýapylyş kodlary, limit-hitler.
  • RPS buýruklary 'subscribe', nobatlaryň ululygy, CPU/NET.
SLO görkezmeleri:
  • WS p95 ≤ 500 ms (sebitiň içinde).
  • End-to-end latency hadysasy p95 ≤ 300 ms (user-partition).
  • Resume success ≥ 99%, message loss = 0 (по at-least-once).
  • Uptime akym endpoint ≥ 99. 95%.

14) Shemalary we wersiýalary dolandyrmak

Eýeler, mysallar we semantika bilen wakalaryň sözlügi.
"Ýumşak" ewolýusiýa: diňe goşmaça meýdanlary goşmak; aýyrmak - "@deprecated" döwürden soň.
Müşderi SDK-syna garşy şertnama synaglary, JSON Schema/Protobuf linterleri.

15) Wakalaryň pleýbuklary (umumy pleýbukyňyza goşuň)

Latency ösüşi: partiýany ätiýaçlyk düwünlerine geçirmek, dellalyň batch ululygyny köpeltmek, möhüm wakalaryň ileri tutulmagyny öz içine almak.
Täzeleniş tupany: 'retry _ after' -i işjeňleşdiriň, handshake çäklerini wagtlaýyn ýokarlandyryň, SSE-follbeki açyň.
Tokenleriň syzmagy: JWKS-iň aýlanmagy, täsir eden tokenleriň yzyna alynmagy, re-auth bilen mejbury reconnect.
Dellalyň partiýasynyň ýitmegi: dikeldilenden soň snapshotlaryň, repleriň re modeimine geçirmek.

16) Mini-spesifikasiýa API (ýönekeýleşdirilen)

Handshake (HTTP GET → WS):

GET /ws? tenant=acme&client=web
Headers:
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
Müşderi buýruklary:
json
{ "op":"subscribe",  "topics":["user:123"], "resume_from":"1748852201:42" }
{ "op":"unsubscribe", "topics":["user:123"] }
{ "op":"ping", "ts":"2025-11-03T12:34:56Z" }
Serwer jogaplary:
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 çek-sanawy

  • Müşderiniň düşelgesiniň 1/10/60 minutyndan soň ofsetden rezýume.
  • Dedup: şol bir "event _ id" -iň gaýtadan iberilmegi ýagdaýy üýtgetmeýär.
  • Gap detektory → awtomatiki 'snapshot' we tekizlemek.
  • Kwotalar we backpressure: ýüklenen müşderi policy-disconnect alýar.
  • Köp sebit: ofseti saklamak bilen sebitiň failover.
  • Howpsuzlyk: JWT möhleti geçen roker belligi, ACL-den daşarda ýazylmak synanyşygy.
  • RG/wakalaryň balansy REST-den öň/soň gelýär - UI dogry "tikýär".

18) Ýygy-ýygydan ýalňyşlyklar

Ýok 'seq/offset' we täzelenmeler - wakalary we ynamy ýitirýäris.
WS-mutasiýalarda möhüm töleg buýruklaryny garyşdyrmak - REST ulanyň.
Backpressure/kwotalaryň ýoklugy - "asylan" baglanyşyklar we ýadyň göçmegi.
Global tertiplilik - gymmat we zerur däl; partiýada tertip ýeterlikdir.
Wakalarda PII-ni logirlemek - gizlinligiň bozulmagy we PCI/GDPR.
Wakalaryň sözlüginiň we wersiýasynyň ýoklugy - müşderiler döwülýär.

Gysgaça maglumat

WebSocket akymlary, eger olar jemlenýän, goralýan we çäklendirilen kanal hökmünde gurlan bolsa, reaktiw UX we operasiýa signallaryny berýär: WSS + mTLS/JWT, topiklere ACL, seq/offset + resume, at-least-once, backpressure/kwotalar, hakykat, gözegçilik we SLO çeşmesi hökmünde dellal. Şeýlelik bilen akymlar ulanyjy üçin çalt we platforma üçin dolandyrylyp bilner - howpsuzlyk we pul meselesinde eglişik bolmazdan.

Contact

Biziň bilen habarlaşyň

Islendik sorag ýa-da goldaw boýunça bize ýazyp bilersiňiz.Biz hemişe kömek etmäge taýýar.

Integrasiýany başlamak

Email — hökmany. Telegram ýa-da WhatsApp — islege görä.

Adyňyz obýýektiw däl / islege görä
Email obýýektiw däl / islege görä
Tema obýýektiw däl / islege görä
Habar obýýektiw däl / islege görä
Telegram obýýektiw däl / islege görä
@
Eger Telegram görkezen bolsaňyz — Email-den daşary şol ýerden hem jogap bereris.
WhatsApp obýýektiw däl / islege görä
Format: ýurduň kody we belgi (meselem, +993XXXXXXXX).

Düwmäni basmak bilen siz maglumatlaryňyzyň işlenmegine razylyk berýärsiňiz.