GH GambleHub

WebSocket akışları ve olayları

TL; DR

İş akışı = güvenilir kanal (WSS) + özetlenmiş ofsetler + idempotent olaylar + katı sınırlar ve geri basınç. Yap: JWT kimlik doğrulaması, konular için yetkilendirme, kalp atışları, seq/offset + resume-token, en az bir kez + deadup. Ölçek için - bir doğruluk kaynağı olarak kullanıcı/kiracı parçalama, yapışkan yönlendirme ve kuyruk (Kafka/NATS/Redis Akışları).

1) iGaming iş durumları (gerçekten yayınladığımız şey)

Denge/limitler: Dengede anlık değişiklikler, RG limitleri, kilitler.
Bahisler/turlar/sonuçlar: onay, durum, kazançların hesaplanması.
Turnuvalar/skor tabloları: pozisyonlar, zamanlayıcılar, ödül etkinlikleri.
Ödemeler: Ödeme/geri ödeme durumu, KYC/AML bayrakları - bildirimler gibi (ve eleştiriler REST + web kitaplarında kalır).
Hizmet etkinlikleri: sohbet mesajları, push banner'lar, oturum durumları, bakım.

2) Protokol ve bağlantı

Yalnızca WSS (TLS 1. 2+/1. 3). Varsayılan aygıt/oturum başına maksimum 1 etkin bağlantı.
Ping/Pong: Müşteri her 20-30 saniyede bir 'ping' gönderir, yanıt zaman aşımı 10 saniyedir. Sunucu ardışık 3 zaman aşımında bağlantıyı keser.
Sıkıştırma: 'Permessage-deflate', çerçeve boyutu sınırı (örneğin, ≤ 64 KB).
Taşıma biçimi: Harici için JSON, dahili/mobil için Protobuf/MsgPack.

3) Kimlik doğrulama ve yetkilendirme

Sorgu/başlıkta JWT el sıkışma ('Sec-WebSocket-Protocol'/' Authorization'), TTL belirteci kısa (≤ 15 dk), bant dışı (REST) ile yenileme.
Kiracı kapsamlı iddialar: 'sub', 'tenant', 'scopes', 'risk _ flags'.
Konulara/kanallara ACL'ler: Yalnızca izin verilen 'konulara' abone olmak (örneğin: 'user: {id}', 'tournament: {id}', 'game: {table}').
Belirteç sona erdiğinde bağlantı yeniden oluşturma: "yumuşak pencere" 60 s.

4) Abonelik modeli

İstemci bağlandıktan sonra komutlar gönderir:
json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }

'resume _ from' - istemci yeniden bağlanırsa ofset (bkz. § 5).
Sunucu ack/nack ile yanıt verir, başarısız olan ACL'ler 'reason'ile' nack 'içindedir.

5) Teslimat garantileri ve özeti

Amaç: Kanal başına en az bir kez + istemcide idempotency.

Her etkinlik, "parça" (genellikle kullanıcı/oda) içinde monoton bir 'seq've veri tekilleştirme için global bir' event _ id 'içerir.
Yeniden bağlantı ile, istemci 'resume _ from' = son onaylanan 'seq' (veya komisyoncunun 'ofset') gönderir. Sunucu, "gerçeğin kaynağı'ndan (Kafka/NATS/Redis Streams) kaçırılan olayları yükler.
Gecikme tutma süresini aşarsa (örneğin, 24 saat), sunucu durumun "anlık görüntüsünü've yeni bir" seq "gönderir.

Müşteri semantiği:
  • Dayanıklı depolamada 'last _ seq'/' event _ id' depolayın (IndexedDB/Keychain).
  • 'Event _ id'ile Dedup,' seq ≤ last_seq' ile olayları atlayın, delikleri (boşluk) algılayın - otomatik 'resync' anlık görüntü isteği.

6) Mesaj şeması (zarf)

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' - domain taksonomisi (olay sözlüğüne bakınız).
PII/PCI - ağ geçidi düzeyinde dışlama/maske.

7) Geri basınç, kotalar ve "pahalı" müşterilere karşı koruma

Sunucu - İstemci: Sürgülü pencereli bağlantı başına gönderme kuyruğu. "Gürültülü" konulara aboneliklerin tamamen sıfırlanması veya '1013'/' policy _ violation' koduyla bağlantının kesilmesi.
Sunucu: 'abonelik/abonelikten çıkma' sınırları (örneğin, ≤ 10/sn), konu listesi sınırı (≤ 50), minimum yeniden abonelik aralığı.
IP/kiracı/anahtar ile oran sınırları. Anomaliler - geçici engelleme.
Öncelik: hayati olaylar (denge, RG sınırları) - öncelik kuyruğu.

8) Koruma ve güvenlik

El sıkışma uç noktasında WAF/bot profili, Origin izin verilen liste.
Kenar ağ geçidi ve akış düğümleri arasında mTLS.
DoS koruması: L4'teki SYN çerezleri, açık WS/keep-alive aralığının sınırlamaları.
Anti-replay: 'Zaman damgası' geçerli bir penceresi 5 dakika olan isteğe bağlı yük imzasında (ortaklar için).
Kiracı izolasyonu: fiziksel/mantıksal sharding, kiracı başına anahtarlar/belirteçler.

9) Ulaşım mimarisi

Ağ geçidi (kenar): TLS terminali, authN/Z, kotalar, parti başına yönlendirme.
Akış düğümleri: 'hash (user_id) % N'ile yapışkan yönlendirmeye sahip durumsuz çalışanlar.
Etkinlik aracısı: Kafka/NATS/Redis Streams - doğruluk kaynağı ve tekrar oynatma arabelleği.
Devlet hizmeti: Anlık görüntüleri saklar (denge, turnuvadaki pozisyonlar).
Çok bölgeli: varlık-varlık; En yakın bölgeye göre GSLB; Giriş sırasında ev-bölge sabittir; Bir feiler ile - başka bir bölgeden "soğuk'bir özet.

10) Düzen, tutarlılık, idempotency

Sipariş, küresel olarak değil, parti (kullanıcı/oda) içinde garanti edilir.
Tutarlılık: olay REST yanıtından önce gelebilir; UX bir ara durumla (iyimser UI + uzlaşma) yaşayabilmelidir.
Idempotence: 'event _ id' yeniden işleme istemcinin durumunu değiştirmez.

11) Hatalar, yeniden bağlantı ve fırtınalar

Kapanış kodları: '1000' (normal), '1008' (ilke), '1011' (dahili), '1013' (sunucu aşırı yüklemesi).
İstemci üstel geri dönüş + jitter: 1s, 2s, 4s... En fazla 30.
Toplu yeniden bağlantılar sırasında ("gürleyen sürü") - sunucu, salt okunur için SSE fallback'i kullanma isteğiyle "retry _ after've" gri "yanıtları verir.

12) Nakit ve anlık görüntüler

Her abonelik, geçerli durumun anlık görüntüsüyle başlayabilir, ardından diff olaylarının bir akışı.
Data _ version schema sürüm oluşturma ve uyumluluk (alan uzantısı istemcileri bozmaz).

13) Gözlemlenebilirlik ve SLO

Metrikler:
  • Bağlantılar: aktif, kurulmuş/sn, kiracı/bölgeye göre dağıtım.
  • Teslimat: Komisyoncudan müşteriye p50/p95 gecikme, düşürme oranı, yeniden gönderme oranı.
  • Güvenilirlik: Anlık görüntü, boşluk dedektörü olmadan başarılı özgeçmişlerin paylaşımı.
  • Hatalar: El sıkışmada 4xx/5xx, kapanış kodları, limit isabetleri.
  • Yük: 'Abone ol' komutlarının RPS'si, kuyruk boyutu, CPU/NET.
SLO kriterleri:
  • WS p95 ≤ 500 ms (bölge içinde) kurulması.
  • Uçtan uca gecikme olayı p95 ≤ 300 ms (kullanıcı bölümü).
  • Başarınızı %99 ≥ sürdürün, mesaj kaybı = 0 (en az bir kez по).
  • Uptime Stream Uç Nokta ≥ 99. 95%.

14) Şema ve sürüm yönetimi

Sahipler, örnekler ve semantiklerle olayların sözlüğü.
"Yumuşak" evrim: sadece isteğe bağlı alanlar ekleme; silme - '@ kullanımdan kaldırıldı' döneminden sonra.
İstemci SDK'lara karşı sözleşme testleri, JSON Schema/Protobuf'ta linters.

15) Olay oyun kitapları (paylaşılan oyun kitabınıza gömülür)

Gecikme artışı: Yedek düğümlere taraf değiştirin, komisyoncudaki partinin boyutunu artırın, hayati olayların önceliklendirilmesini sağlayın.
Storm'u yeniden bağlayın: 'retry _ after'ı etkinleştirin, geçici olarak el sıkışma sınırlarını yükseltin, SSE fallback'i etkinleştirin.
Token sızıntısı: JWKS rotasyonu, etkilenen tokenlerin iptali, yeniden auth ile yeniden bağlantı kurmaya zorlandı.
Broker taraf kaybı: Anlık görüntü moduna geçiş, kurtarma işleminden sonra tekrar oynatma.

16) API Mini Spesifikasyonu (Basitleştirilmiş)

El sıkışma (HTTP GET - WS):

GET /ws? tenant=acme&client=web
Headers:
Authorization: Bearer <JWT>
X-Trace-Id: <uuid>
İstemci komutları:
json
{ "op":"subscribe",  "topics":["user:123"], "resume_from":"1748852201:42" }
{ "op":"unsubscribe", "topics":["user:123"] }
{ "op":"ping", "ts":"2025-11-03T12:34:56Z" }
Sunucu Yanıtları:
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 kontrol listesi

  • Müşterinin 1/10/60 dakikalık kesinti süresinden sonra ofset özeti.
  • Dedup: Aynı 'event _ id'in yeniden teslim edilmesi durumu değiştirmez.
  • Boşluk dedektörü - otomatik 'anlık görüntü've hizalama.
  • Kotalar ve geri basınç: yüklenen istemci politika bağlantısını keser.
  • Multiregion: ofset korurken yük devretme bölgesi.
  • Güvenlik: JWT tarafından token rocker süresi doldu, ACL dışında abone olmaya çalışıyor.
  • RG/olay dengesi REST'ten önce/sonra gelir - UI doğru şekilde "dikişler".

18) Sık yapılan hatalar

'Seq/offset've yenileme yok - olayları ve güveni kaybedin.
WS mutasyonlarında kritik ödeme komutlarını karıştırma - REST kullanın.
Geri basınç/kota eksikliği - "askıya alınmış" bağlantılar ve bir bellek çığı.
Küresel düzenlilik pahalı ve gereksizdir; Partide yeterince düzen var.
PII etkinliklerinde oturum açma - gizlilik ihlalleri ve PCI/GDPR.
Olayların ve sürümlerin sözlüğünün olmaması - müşteriler bozulur.

Özet

WebSocket akışları, özetlenmiş, korumalı ve sınırlı bir kanal olarak oluşturulursa reaktif UX ve operasyonel sinyaller verir: WSS + mTLS/JWT, konularda ACL, seq/offset + resume, en az bir kez veri tekilleştirme, geri baskı/kotalar, bir gerçek kaynağı olarak broker, gözlemlenebilirlik ve SLO. Böylece akışlar kullanıcı için hızlı ve platform için yönetilebilir kalır - güvenlik ve paradan ödün vermeden.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.