GH GambleHub

جریانها و رویدادهای WebSocket

TL ؛ دکتر متخصص

جریان کار = کانال مورد اعتماد (WSS) + آفست خلاصه + رویدادهای idempotent + محدودیت های سخت و فشار به عقب. انجام: احراز هویت JWT، مجوز برای موضوعات، ضربان قلب، seq/offset + resume-token، حداقل یک بار + deadup. برای مقیاس - sharding کاربر/مستاجر، مسیریابی چسبنده و صف (جریانهای کافکا/NATS/Redis) به عنوان منبع حقیقت.

1) موارد کسب و کار iGaming (آنچه ما واقعا جریان)

تعادل/محدودیت: تغییرات لحظه ای در تعادل، محدودیت RG، قفل.
شرط/دور/نتایج: تایید، وضعیت، محاسبه برنده.
مسابقات/مدیران: موقعیت، تایمر، رویدادهای جایزه.
پرداخت ها: وضعیت پرداخت/بازپرداخت، پرچم های KYC/AML - مانند اعلان ها (و انتقاد در REST + webhooks باقی می ماند).
رویدادهای خدمات: پیام های چت، آگهی های فشار، وضعیت جلسه، تعمیر و نگهداری.

2) پروتکل و اتصال

فقط WSS (TLS 1) 2+/1. 3). حداکثر 1 اتصال فعال در هر دستگاه/جلسه پیش فرض.
پینگ/پنگ: مشتری «پینگ» را هر 20-30 ثانیه ارسال می کند، زمان پاسخگویی 10 ثانیه است. سرور اتصال را در 3 زمان متوالی قطع می کند.
فشرده سازی: 'permessage-deflate'، محدودیت اندازه قاب (به عنوان مثال، ≤ 64 کیلوبایت).
فرمت بارگیری: JSON برای خارجی، Protobuf/MsgPack برای داخلی/تلفن همراه.

3) احراز هویت و مجوز

دست دادن JWT در پرس و جو/هدر ('Sec-WebSocket-Protocol '/' Authorization')، نشانه TTL کوتاه (≤ 15 دقیقه)، تازه کردن توسط خارج از باند (REST).
ادعاهای دامنه مستاجر: «sub»، «tenant»، «scopes»، «risk _ flags».
ACL ها به موضوعات/کانال ها: اشتراک فقط به موضوعات مجاز (به عنوان مثال: 'کاربر: {id}'، 'مسابقات: {id}'، 'بازی: {جدول}').
ایجاد مجدد اتصال زمانی که توکن منقضی می شود: «پنجره نرم» 60 ثانیه.

4) مدل اشتراک

مشتری پس از اتصال دستورات را ارسال می کند:
json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }

'resume _ from' - offset (نگاه کنید به § 5) اگر مشتری دوباره متصل شود.
سرور با ack/nack پاسخ می دهد، ACL های شکست خورده در «nack» با «reason» هستند.

5) تضمین تحویل و خلاصه

هدف: حداقل یک بار در هر کانال + idempotency در مشتری.

هر رویداد دارای یک «seq» یکنواخت با «قسمت» (معمولا کاربر/اتاق) و یک «event _ id» جهانی برای deduplication است.
با اتصال مجدد، مشتری «resume _ from» = آخرین «seq» (یا «offset» کارگزار) را ارسال می کند. سرور رویدادهای از دست رفته را از «منبع حقیقت» (جریانهای کافکا/NATS/Redis) بارگیری می کند.
اگر تاخیر بیش از نگهداری (به عنوان مثال، 24 ساعت)، سرور یک عکس فوری از وضعیت و یک «seq» جدید ارسال می کند.

معانی مشتری:
  • Store 'last _ seq '/' event _ id' in ذخیره سازی با دوام (IndexedDB/Keychain).
  • Dedup توسط 'event _ id'، پرش حوادث با 'seq ≤ last_seq'، تشخیص سوراخ (شکاف) → خودکار' 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
}

«نوع» - طبقه بندی دامنه (نگاه کنید به فرهنگ لغت رویداد).
PII/PCI - حذف/ماسک در سطح دروازه.

7) فشار پشتی، سهمیه و حفاظت در برابر مشتریان «گران»

سرور → مشتری: ارسال هر اتصال صف با پنجره کشویی. کامل - بازنشانی اشتراک به موضوعات «پر سر و صدا» و یا قطع با کد «1013 »/« سیاست _ نقض».
Client → Server: محدودیت در «subscribe/unsubscribe» (به عنوان مثال، ≤ 10/ثانیه)، محدودیت لیست موضوع (≤ 50)، حداقل فاصله بازپرداخت.
محدودیت نرخ توسط IP/مستاجر/کلید. ناهنجاری → مسدود کردن موقت.
اولویت: رویدادهای حیاتی (تعادل، محدودیت RG) - صف اولویت.

8) حفاظت و ایمنی

مشخصات WAF/bot در نقطه پایانی دست دادن، لیست مجاز منبع.
mTLS بین دروازه لبه و گره های جریان.
حفاظت از DoS: کوکی SYN در L4، محدودیت در تعداد WS باز/نگه داشتن فاصله زنده.
ضد پخش: «برچسب زمان» در امضای اختیاری بار (برای شرکا) با یک پنجره معتبر 5 دقیقه.
جداسازی مستاجر: تقسیم فیزیکی/منطقی، کلید/نشانه در هر مستاجر.

9) معماری حمل و نقل

دروازه (لبه): ترمینال TLS، authN/Z، سهمیه، مسیریابی در هر حزب.
گره های جریان: کارگران بدون حالت با مسیریابی چسبنده توسط 'هش (user_id)٪ N'.
کارگزار رویداد: Kafka/NATS/Redis Streams - منبع حقیقت و بافر پخش.
خدمات دولتی: عکس های فوری را ذخیره می کند (تعادل، موقعیت در مسابقات).
چند منطقه ای: دارایی-دارایی ؛ GSLB توسط نزدیکترین منطقه ؛ صفحه اصلی منطقه در ورود به سیستم ثابت است ؛ با یک feiler - خلاصه «سرد» از یک منطقه دیگر.

10) نظم، انسجام، بی نظمی

سفارش در داخل حزب (کاربر/اتاق) تضمین شده است، نه در سطح جهانی.
ثبات: رویداد ممکن است قبل از پاسخ REST باشد ؛ UX باید بتواند با یک حالت متوسط (رابط کاربری خوش بینانه + آشتی) زندگی کند.
Idempotence: پردازش مجدد «event _ id» وضعیت مشتری را تغییر نمی دهد.

11) خطاها، اتصال مجدد و طوفان

کدهای بسته شدن: «1000» (عادی)، «1008» (سیاست)، «1011» (داخلی)، «1013» (اضافه بار سرور).

عقب نشینی مشتری + jitter: 1s، 2s، 4s... حداکثر 30 ثانیه

در طول اتصال مجدد دسته جمعی («گله رعد آسا») - سرور پاسخ های «retry _ after» و «خاکستری» را با یک اعلان برای استفاده از SSE fallback برای فقط خواندنی می دهد.

12) نقدی و عکس های فوری

هر اشتراک می تواند با یک عکس فوری از وضعیت فعلی شروع شود، سپس یک جریان از رویدادهای مختلف.
Data _ version schema versioning and compatibility (پسوند فیلد مشتریان را خراب نمی کند).

13) قابلیت مشاهده و SLO

معیارها:
  • اتصالات: فعال، تاسیس/ثانیه، توزیع توسط مستاجر/منطقه.
  • تحویل: تاخیر p50/p95 از کارگزار به مشتری، نرخ افت، نرخ ارسال مجدد.
  • قابلیت اطمینان: سهم رزومه موفق بدون یک عکس فوری، آشکارساز شکاف.
  • خطاها: 4xx/5xx در دست دادن، کدهای بسته شدن، بازدید محدود.
  • بار: RPS از دستورات مشترک، اندازه صف، CPU/NET.
معیارهای SLO:
  • ایجاد WS p95 ≤ 500 ms (در منطقه).
  • رویداد تأخیر پایان به پایان p95 ≤ 300 ms (پارتیشن کاربر).
  • موفقیت رزومه ≥ 99٪، از دست دادن پیام = 0 (по حداقل یک بار).
  • آپتایم جریان نقطه پایانی ≥ 99. 95%.

14) طرح و مدیریت نسخه

فرهنگ لغت رویدادها با صاحبان، نمونه ها و معانی.
تکامل «نرم»: فقط اضافه کردن زمینه های اختیاری ؛ حذف - پس از دوره «@ deprecated».
تست قرارداد در برابر SDK های مشتری، خطوط در JSON Schema/Protobuf.

15) playbooks حادثه (جاسازی در playbook مشترک شما)

رشد تأخیر: احزاب را به گره های پشتیبان تغییر دهید، اندازه دسته را در کارگزار افزایش دهید، اولویت بندی رویدادهای حیاتی را فعال کنید.
طوفان مجدد را فعال کنید: «retry _ after» را فعال کنید، به طور موقت محدودیت های دست دادن را افزایش دهید، SSE را فعال کنید.
نشت توکن: چرخش JWKS، ابطال توکن های آسیب دیده، مجبور به اتصال مجدد با اتصال مجدد.
از دست دادن حزب کارگزار: انتقال به حالت عکس فوری، پخش پس از بازیابی.

16) API مینی مشخصات (ساده شده)

دست دادن (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) چک لیست UAT

  • خلاصه ای از افست پس از 1/10/60 دقیقه از خرابی مشتری.
  • Dedup: تحویل مجدد همان «event _ id» حالت را تغییر نمی دهد.
  • آشکارساز شکاف → خودکار «عکس فوری» و تراز.
  • سهمیه ها و فشار پشتی: مشتری بارگیری شده قطع ارتباط را دریافت می کند.
  • Multiregion: منطقه failover در حالی که حفظ افست.
  • امنیت: توکن rocker منقضی شده توسط JWT، تلاش برای اشتراک در خارج از ACL.
  • تعادل RG/event قبل/بعد از REST - UI به درستی «بخیه» می آید.

18) خطاهای مکرر

بدون «SEQ/جبران» و تجدید - از دست دادن حوادث و اعتماد.
مخلوط کردن دستورات پرداخت بحرانی در جهش های WS - از REST استفاده کنید.
کمبود فشار پشتی/سهمیه - اتصالات «معلق» و بهمن حافظه.
نظم جهانی گران و غیر ضروری است ؛ نظم در حزب کافی است.
ورود PII به رویدادها - نقض حریم خصوصی و PCI/GDPR.
فقدان یک فرهنگ لغت از حوادث و نسخه - مشتریان شکستن.

خلاصه

جریان های WebSocket UX و سیگنال های عملیاتی را فعال می کنند اگر آنها به عنوان یک کانال خلاصه، محافظت شده و محدود ساخته شوند: WSS + mTLS/JWT، ACL در موضوعات، seq/offset + resume، حداقل یک بار با deduplication، backpressure/quotas، کارگزار به عنوان منبع حقیقت، مشاهده و SLO. بنابراین جریان برای کاربر سریع و قابل کنترل برای پلت فرم باقی می ماند - بدون مصالحه در امنیت و پول.

Contact

با ما در تماس باشید

برای هرگونه سؤال یا نیاز به پشتیبانی با ما ارتباط بگیرید.ما همیشه آماده کمک هستیم!

شروع یکپارچه‌سازی

ایمیل — اجباری است. تلگرام یا واتساپ — اختیاری.

نام شما اختیاری
ایمیل اختیاری
موضوع اختیاری
پیام اختیاری
Telegram اختیاری
@
اگر تلگرام را وارد کنید — علاوه بر ایمیل، در تلگرام هم پاسخ می‌دهیم.
WhatsApp اختیاری
فرمت: کد کشور و شماره (برای مثال، +98XXXXXXXXXX).

با فشردن این دکمه، با پردازش داده‌های خود موافقت می‌کنید.