GH GambleHub

Socket strims և իրադարձություններ

TL; DR

Աշխատանքային հոսքը = վստահելի ջրանցք (WFC) + ամփոփված օֆսեթներ + idempotent իրադարձություններ + խիստ լիմիտներ և backpressure։ Արեք 'JWT-վավերացում, տոպիկայի, heartbeats, seq/www.set + resume-tocen, at-lement-once + dedup։ Մասշտաբի համար 'շարդինգը user/tenae, sticky-routing և հերթը (Kafka/NATS/Redis Streams) որպես ճշմարտության աղբյուր։

1) iGaming բիզնես քեյսերը (որ իրականում սթրիմ է)

Հավասարակշռություն/լիմիտներ 'հավասարակշռության ակնթարթային փոփոխություններ, RG լիմիտներ, արգելափակումներ։

Տոկոսադրույքները/արդյունքները 'հաստատումը, կարգավիճակը, հաղթողների հաշվարկը։

Մրցույթներ/առաջնորդներ 'դիրքեր, թայմերներ, մրցանակային իրադարձություններ։

Վճարումները 'payout/refund, KYC/AML դրոշները, որպես ծանուցումներ (իսկ քննադատությունը մնում է REST + webhuki)։

Ծառայության իրադարձությունները 'չաթի հաղորդագրությունները, push-բանները, նստաշրջանի արձանները, maintena.ru։

2) Արձանագրություն և միացում

Միայն WFC (TFC 1։ 2+/1. 3). Առավելագույն 1 ակտիվ միացում սարքի/ստեղնաշարի վրա լռելյայն։

Ping/Pong: Հաճախորդը «ping» է յուրաքանչյուր 20-30 վրկ, թայմաութ պատասխանը 10 վրկ: Սերվերը միանում է 3 թայմաուտով անընդմեջ։

Ֆինլանդիա '«permessage-entlate», շրջանակի չափի սահմանը (օրինակ ՝ 3864 KB)։

Ծանրաբեռնվածության ձևաչափը 'JSON արտաքին, Disobuf/WingPack ներքին/բջջային համար։

3) Վավերացում և հեղինակային իրավունք

Handshaik-ից JWT-ի հետ query/header-ում («Sec-Express Socket-Eurocol »/« Authorization»), TTL-ը կարճ է (6515 րոպե), refresh-ը out-band-band (REST)։

Tenant-scoped claims: `sub`, `tenant`, `scopes`, `risk_flags`.

ACL-ը տեղանունների/ալիքների վրա 'բաժանորդագրություն միայն թույլատրված «topic» (օրինակ ՝ «user: » id', «» tournament: «id +,» «game:»)։

Միացության փոխներարկումը հոսանքի երկարությամբ '«փափուկ պատուհան» 60 վրկ։

4) Ստորագրման մոդել

Connection-ից հետո հաճախորդը ուղարկում է թիմերին

json
{ "op":"subscribe", "topics":["user:123", "tournament:456"], "resume_from":"1748852201:987654" }
{ "op":"unsubscribe", "topics":["tournament:456"] }

«resume _ from» - օֆսեթ (տե՛ ս 355), եթե հաճախորդը վերականգնում է կապը։

Սերվերը պատասխանում է ack/nack-ին, որը չի անցել ACL-ը '«nack» -ի հետ։

5) Առաքման և ամփոփման երաշխիքները

Նպատակը 'at-leport-once-once-ը ալիքի վրա + հաճախորդի մոտ։

Յուրաքանչյուր իրադարձություն ունի «կուսակցության» (սովորաբար user/room) և գլոբալ «event _ id» -ի համար։

Ռի կոնեկտում հաճախորդը փոխանցում է "resume _ from" = վերջին ապացուցված "seq" (կամ "www.set 'brocker)։ Սերվերը ավելացնում է բաց թողված իրադարձությունները «ճշմարտության աղբյուրից» (Kafka/NATS/Redis Streams)։

Եթե լագը գերազանցում է retention (օրինակ, 24 ժամ) - սերվերը ուղարկում է «www.apshot» վիճակը և նոր «seq»։

Սեմանտիկան հաճախորդի մոտ

Պահել 'lance _ seq '/' event _ id' durable պահեստում (IndexeddDB/Keychain)։

Dedup 'event _ id', բաց թողնել իրադարձությունները 'seq www.l.l.ru _ seq ", հայտնաբերել անցքեր (gap) wwwww.ru ավտոմեքենայի' resync 'crupshot հարցումը։

6) Հաղորդագրության սխեման (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 '- հիբրիդային տաքսոնոմիա (տե՛ ս իրադարձությունների բառարանը)։

PII/PCI - բացառել/քողարկել դարպասի մակարդակում։

7) Backpressure, քվոտաներ և պաշտպանություն «թանկ» հաճախորդներից։

Serverts Client: per-connectionsend-queue-ի հետ «սայթաքող պատուհանի» հետ։ Լոպենը «աղմկոտ» տոպիկայի կամ ww.conn.ru ստորագրությունների հավաքումն է '«1013 »/« policy _ violation» կոդով։

Client no Server: limits 'www.scribe/unsubscribe "(օրինակ ՝ 10/վրկ), տոպիկների ցուցակի սահմանափակումը (3.50), նվազագույն ռուսական ռուբլիա։

Rate limits-ը IP/tenae/բանալին։ Աննոմալիան ժամանակավոր արգելափակում է։

Priority: Կենսական կարևոր իրադարձություններ (հավասարակշռություն, RG-limits) գերակա հերթն է։

8) Պաշտպանություն և անվտանգություն

WAF/բոտ պրոֆիլը handshaik-endpointe-ում, Origin-ի թույլատրված ցանկը։

MTSA-ի միջև edge-ի և strem-հանգույցների միջև։

DoS-պաշտպանություն 'MSN-cookies L4-ում, L4-ում, Limits-ի բաց WS/wwwww.keep-alive-ի համար։

Anti-replay: «timestamp» -ը ազդանշանային ստորագրության մեջ բեռը (գործընկերների համար) թույլատրելի պատուհանի հետ 5 ռուբլով

Վարձակալների մեկուսացումը 'ֆիզիկական/տրամաբանական շարդացիա, բանալիներ/հոսանքներ per-tenae։

9) Տեղափոխական ճարտարապետությունը

Դարպասը (edge) 'TMS տերմինայթ, authN/Z, քվոտաներ, փոխանցման միկրոակտիվացում։

Stream-2019 'stateless-workers sticky-routing-ով' hash (user _ id)% N '։

Իրադարձությունների բրոքերը ՝ Kafka/NATS/Redis Streams-ը ճշմարտության և ռելեի բուֆերի աղբյուրն է։

State-ծառայություն 'պահպանում է դիպուկահարները (bal.ru, դիրքերը մրցույթի մեջ)։

Multiregion: 71-71; GSLB-ը մոտակա տարածքում։ home-region տեղադրված է լոգինի մեջ; ֆեյլովերի դեպքում '«սառը» ամփոփում այլ տարածաշրջանից։

10) Կարգը, ներդաշնակությունը, գաղափարախոսությունը

Պատվիրումը երաշխավորված է կուսակցության ներսում (user/room), ոչ գլոբալ։

Կոնսիստենցիա 'իրադարձությունը կարող է գալ ավելի շուտ, քան REST պատասխանը։ UX-ը պետք է կարողանա ապրել միջանկյալ վիճակի հետ (optimistic UI + reconciliation)։

Idempotention: կրկնվող «event _ id» -ը չի փոխում հաճախորդի վիճակը։

11) Սխալներ, reconna.ru և «փոթորիկ»

Փակման իրականացումը '«1000» (normal), «1007» (policy), «1011» (ental), «1013» (serverload)։

Հաճախորդի էքսպոնենցիալ backoff + jitter: 1s, 2s, 4s... մաքս 30s.

Զանգվածային ռեկոնեկտների ժամանակ («thundering herd») սերվերը տալիս է «retry _ after» և «մոխրագույն» պատասխաններ, որոնք հուշում են օգտագործել SSE fallback read-only-ի համար։

12) Քեշը և դիպուկահարները

Յուրաքանչյուր բաժանորդագրություն կարող է սկսել իրական վիճակից, ապա 'իրադարձությունների հոսքը։

Սխեմայի տարբերակումը «բանաձև _ version» և համատեղելիությունը (դաշտերի ընդլայնումը հաճախորդներին չի կոտրում)։

13) Դիտարկումը և SLO-ն

Մետրիկները

Միացություններ ՝ ակտիվ, տեղադրված/վայրկյան, վարձակալների բաշխումը/տարածաշրջանները։

Առաքում ՝ p50/p95 ձգձգումներ բրոկերից մինչև հաճախորդը, drop-rate, resend-rate։

Տե՛ ս 'հաջողակ ամփոփումների մասնաբաժինը առանց կեղևի, gap-դետեկտորի։

Սխալները ՝ 4xx/5xx-ը Handshaike-ում, փակման, լիմիթ-հիթերի վրա։

Մոսկվա: RPS հրամաններ 'www.scribe ", հերթերի չափը, CPU/NET։

SLO կենտրոններ

WS p95-ի տեղադրումը 500 մզ է (տարածաշրջանի ներսում)։

End-to-end latency իրադարձությունները p95-300 ms (user-partium)։

Resume success ≥ 99%, message loss = 0 (по at-least-once).
Uptime strim-endpointa 3699։ 95%.

14) Սխեմաների և տարբերակների կառավարում

Տանտերերի, օրինակների և սեմանտիկայի հետ կապված իրադարձությունների բառարան։

«Փափուկ» էվոլյուցիա 'միայն օպորտիկ դաշտերի ավելացումը։ հեռացումը '«@ deprecated» ժամանակահատվածից հետո։

Պայմանագրային թեստեր հաճախորդների SDK-ի դեմ, JSON Schema/Eurobuf-ում։

15) Պլեյբուկները (ներկառուցել ձեր ընդհանուր պլեյբուկում)

Latency-ի աճը 'խմբաքանակները անցնել պահեստային բջիջների վրա, մեծացնել batch չափը բրոկերից, ներառել կենսական կարևոր իրադարձությունների գերակայությունը։

Ռեքոննեկտների փոթորիկը 'ակտիվացնել «retry _ after», ժամանակավորապես բարձրացնել handshake-ի սահմանները, ներառել SSE ֆոլբեկը։

Հոսանքների արտահոսքը 'JWKS-ի լուծարումը, տուժած հոսանքների արձագանքը, re-auth-ի հարկադիր reconnations։

Բրոքերի կուսակցության կորուստը 'տեղափոխումը դիպուկահարների ռեժիմին, վերականգնումից հետո։

16) API մինի-ճշգրտումը (պարզեցված)

Handshake (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 chek թերթ

  • Ամփոփենք օֆսեթից հաճախորդի 1/10/60 րոպեից հետո։
  • Dedup 'նույն «event _ id» -ի կրկնվող առաքումը չի փոխում վիճակը։
  • Gap-դետեկտորը տեղադրվում է ավտոմատ 'www.apshot "և հավասարեցում։
  • Քվոտաները և backpressure: բեռնված հաճախորդը ստանում է policy-www.conn.ru։
  • Multiregion: failover տարածաշրջանի պահպանությամբ։
  • Lenta.ru: Token-rocker, որն ավարտվում է JWT-ից, ACL-ից դուրս գնալու փորձը։
  • RG/իրադարձությունների հավասարակշռությունը գալիս է ավելի շուտ/REST-ից հետո, UI-ն ճիշտ «կարում է»։

18) Հաճախակի սխալներ

Ոչ "seq/www.set" և "- մենք կորցնում ենք իրադարձությունները և վստահությունը։

Քննադատական վճարային թիմերի խառնուրդը WS մուտացիաներում 'օգտագործեք REST-ը։

Backpressure/quot-ի բացակայությունը հիշողության «կասեցված» միացությունն է և լավինը։

Համաշխարհային կարգուկանոնը թանկ է և կարիք չունի։ բավականին կարգուկանոն է կուսակցության մեջ։

PII տրամաբանությունը իրադարձությունների մեջ 'մասնագիտության խախտումներ և PCI/GDPR։

Իրադարձությունների և տարբերակման բառարանի բացակայությունը կոտրվում է հաճախորդների կողմից։

Ռեզյումե

Socket-strims-ը տալիս է UX և ռուսական ազդանշաններ, եթե դրանք կառուցված են որպես ամփոփված, պաշտպանված և սահմանափակ ջրանցք 'WFC + mTRK/JWT, ACL տոպիկի վրա, seq/www.set + resume, at-leport-once' s, dedeupupup/jup/bpututup/bputututum/dum/jutum/jutum/jum/jutum/jute/jutum/jutum/jum/jum/j, բրոքերը որպես ճշմարտության աղբյուր, դիտարկումը և SLO-ն։ Այսպիսով, սթրիմները մնում են արագ օգտագործողի համար և կառավարվում են պլատֆորմի համար 'առանց անվտանգության և փողի փոխզիջումների։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։