Logo GH

Веб-сокетҳо и SSE

1) кӯтоҳ: чӣ ва барои чӣ

Web-Socket (WS/WSS) - Таҷдиди пайвасти HTTP ба канали пурраи дуплекс. Мувофиқ барои чатҳо, бозиҳои зинда, ҳамкорӣ, телеметрияи дуҷониба.
Чорабиниҳои сервер-фиристодашуда (SSE) - ҷараёни яктарафа аз сервер ба браузер (MIME 'text/event-stream'). Беҳтарин барои тикерҳо, огоҳиномаҳо, нохунакҳо, пешрафти вазифаҳо. Мизоҷ - 'Чорабинӣ'.

Қоидаи интихоб:
  • Ба шумо вуруди муштарӣ дар вақти воқеӣ лозим аст (аксар вақт бисёр) → Web-Socket.
  • Танҳо навсозиҳои серверро пахш кунед, мутобиқат ва содда аз SSE → муҳимтар аст.

2) Шабака ва протоколҳо

2. 1 Нақлиёт ва мутобиқат

Вебсокет: Аз HTTP 'GET сар мешавад... Такмилдиҳӣ: websocket '(HTTP/1. 1). Барои HTTP/2, RFC 8441 (CONNECT + ': protocol = websocket') имконпазир аст, дастгирӣ аз прокси вобаста аст. Корҳо дар болои TLS (WSS) - ҳатмӣ дар фурӯш.
SSE: ҷавоби муқаррарии HTTP ('200 OK') бо ҷараён. Он тавассути HTTP/1 хуб мегузарад. 1/2/3, мувофиқ бо CDN/proxy (агар пайвастҳои дароз қатъ карда нашаванд).

2. 2 Проксиҳо/тавозунҳо/CDN

Санҷед: дастгирии пайвастҳои дарозмуддат, бекорхобида ва танаффус, ҷаласаҳои часпанда (агар ҳолат дар гиреҳ бошад).
Барои WS: дохил кардани 'proxy _ read _ timeout', сарлавҳаҳои 'навсозӣ', маҳдудиятҳои пайвастшавӣ.
Барои SSE, боварӣ ҳосил кунед, ки прокси ҷавобро халалдор намекунад (вагарна муштарӣ ҳодисаҳоро дар вақташ намебинад).

3) Модели паём ва назорати ҷараён

Websocket: чорчӯбаҳои матнӣ ё бинарӣ; 'ping/pong' мавҷуд аст, аммо ягон пуштибонии дарунсохт мавҷуд нест - татбиқ дар барнома (навбатҳо, тирезаҳо, сиёсати тарки).
SSE: рӯйдодҳои матнӣ (UTF-8); муштарӣ қодир аст бо таъхири сохта дубора пайваст шавад; сервер метавонад 'retry:' -ро муайян кунад. Сарлавҳаи 'ва' Last-Event-ID 'мавҷуд аст, ки аз мавқеи дилхоҳ оғоз меёбад.

Backpressure (таҷрибаҳои умумӣ):
  • Иқтибос паёмҳои баромади ҳар як муштарӣ.
  • Маҳдуд кардани навбати ҳодисаҳои ношинос; аз ҳад зиёд - партофтани афзалияти паст/агрегат.
  • Барои WS, равзанаи лағжиш ва ACK-сатҳи барномаро истифода баред.

4) Эътимоднокии пайвастҳо

4. 1 Муайянкунӣ ва нигоҳдорӣ

WS: ҳар сония 'ping' фиристед; фосилаи танаффус - бо бозгашти экспоненсиалӣ + ҷиттер пайваст шавед.
SSE: сервер "шарҳҳо" -ро мефиристад :\n 'ҳамчун зарбаи дил, то ки пайвастшавӣ бекор ҳисоб карда шавад; муштарӣ аз нав пайваст мешавад.

4. 2 Барқарорсозии ҷараён

WS: паёмҳои ҷуброншаванда/пайдарпайро нигоҳ доред ва пас аз пайвастшавӣ дельторо дархост кунед.
SSE: барои ҳар як чорабинӣ 'id:' ва 'Last-Event-ID' -ро дар дархост истифода баред - сервер рӯйдодҳои партофташударо мефиристад.

5) Аутентификатсия ва авторизатсия

JWT Bearer бо дархости URL (WS) хатарнок аст (ихроҷ дар гузоришҳо). Сарлавҳаро истифода баред (тавассути дастнависи ибтидоии HTTP) ё кукиҳо бо парчамҳои 'Secure', 'HttPonly', 'Same

MTLS (махсусан барои B2B) имконпазир аст, инчунин имзо (HMAC) аз рӯи дархости аввалия.
Барои SSE бо кукиҳо дар бораи CORS ('Дастрасӣ ба назорат-иҷозат-пайдоиш', 'Иҷозат-эътимоднома') дар хотир доред.

Гардиши токен: ҷараёнро буред. Pass "ба зудӣ ба итмом мерасад" → муштарӣ алоқаро бо аломати нав боз мекунад.

6) Формат ва фишурдани маълумот

Web-Socket: имкон диҳед, ки перпессаж-deflate бодиққат (CPU); аз фишурдани форматҳои аллакай фишурдашуда канорагирӣ кунед (Proto, Avro). Сарбории бинарӣ нисбат ба JSON сарфакорона аст.
SSE: ин матн аст; барои маълумоти калон, истинодро ба захираи REST/GRPC ё файлҳои chunk фиристед; gzip нақлиёт барои SSE - мувофиқ, аммо буферкуниро дар прокси/CDN тамошо кунед.

7) Тарозу ва мухлиси берун

7. 1 Миқёси уфуқӣ

Барои бозоғоз камбудиҳои барномаро ройгон нигоҳ доред. Ҳолати пайвастшавӣ - дар қабати пеши; маълумот - аз брокер.
Агар навбатҳои маҳаллӣ мавҷуд бошанд, часпак (ҳаш аз ҷониби сеанс/корбар) лозим аст.
Идеалӣ пеши бешаҳрвандӣ аст: гиреҳ танҳо обунаҳои мултиплексҳо; чорабиниҳо аз як паб/зер маъмуланд.

7. 2 Pub/Sub ва брокерҳо

Барои мухлиси васеъ, Kafka/NATS/Redis Streams-ро истифода баред.
Қабати "Fanout Gateway" ба мавзӯъҳо обуна мешавад ва муштариёнро тавассути WS/SSE халалдор мекунад.
Барои мувозинат кардани сарборӣ дар гиреҳҳо калиди масирро истифода баред (масалан, 'корбар', 'match' Id ').

8) Конфигуратсияҳои истеҳсолӣ

8. 1 NGINX - Веб-Сокет

nginx map $http_upgrade $connection_upgrade { default upgrade; '' close; }

server {
listen 443 ssl http2;
server_name ws. example. com;

location /ws {
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1. 1;
proxy_read_timeout 75s; # increase for long sessions proxy_send_timeout 15s;
proxy_pass http://ws-backend;
}
}

8. 2 NGINX - SSE (барои хомӯш кардани буферӣ муҳим аст)

nginx location /events {
proxy_http_version 1. 1;
proxy_set_header Connection "";
proxy_buffering off; # is critical for proxy_cache off threads;
chunked_transfer_encoding on;
proxy_read_timeout 60m;
proxy_pass http://sse-backend;
}

8. 3 Кубернетес (Шарҳи Ingress, NGINX Ingress)

yaml metadata:
annotations:
nginx. ingress. kubernetes. io/proxy-read-timeout: "3600"
nginx. ingress. kubernetes. io/proxy-send-timeout: "3600"
nginx. ingress. kubernetes. io/enable-websocket: "true"
nginx. ingress. kubernetes. io/proxy-buffering: "off"  # для SSE

9) Намунаҳои кодекс

9. 1 муштарии SSE (браузер)

js const es = new EventSource("/events? channel=odds", { withCredentials: true });

es. addEventListener("message", (e) => {
const data = JSON. parse(e. data);
renderOdds(data);
});

es. addEventListener("error", () => {
//EventSource will reconnect itself; can be shown spinner
});

9. 2 Сервери SSE (Гиреҳ. js/Express)

js app. get('/events', (req, res) => {
res. writeHead(200, {
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
});
res. write ('retry: 3000\n\n') ;//3s backoff to client

const sub = subscribe(req. query. channel, (event) => {
res. write(`id: ${event. id}\n`);
res. write(`event: message\n`);
res. write(`data: ${JSON. stringify(event. payload)}\n\n`);
});

req. on('close', () => sub. unsubscribe());
});

9. 3 Муштарии Web-Socket (браузер)

js const ws = new WebSocket("wss://ws. example. com/ws");
ws. onopen = () => ws. send(JSON. stringify({ type: "join", room: "chat-1" }));
ws. onmessage = (m) => handle(JSON. parse(m. data));
ws. onclose = () => scheduleReconnect();

10) Амният ва маҳдудият

Маҳдудияти нархҳо барои як пайвастшавӣ ва барои як корбар: суръати паёмҳои воридшаванда (WS) ва суръати ҷараёни баромадро (WS/SSE) маҳдуд кунед.
Квота аз рӯи мӯҳлати пайвастшавӣ ва трафики умумӣ.
Андозаи паём маҳдудияти i max паёмҳо/сек.
Филтрҳои WAF/бот дар марҳилаи дастӣ; муҳофизат аз обхезии пайвастшавӣ (бисёр пайвастҳои кӯтоҳ).
Ҷудокунии фазои иҷорагир/ном: ҳавзҳои инфиродӣ.

11) Мушоҳидакорӣ

Нишондиҳандаҳо:
  • 'connections _ active', 'connections _ new _ total', 'bytes _ in/out',
  • 'messages _ in/out _ total', 'droft _ messages _ total',
  • 'дубора пайваст мешавад _ total', 'latency _ delivery _ ms {p50, p95, p99}'.
  • Гузоришҳо: IP/UA, корбар/иҷорадиҳанда, сабаби пӯшида ('close _ code'), давомнокӣ.
  • Пайгирӣ: алоқаманд кардани рӯйдодҳо бо фармони аслӣ (таносуби ID); барои WS, фосилаҳои "виртуалӣ" -ро истифода баред.

12) Нозукиҳои амалиётӣ

Қатъи TLS ба муштарӣ наздиктар аст (CDN/канор).
Гардиши проактивии пайвастҳо (зебо) ҳангоми фарсудашавӣ: парчамро "дубора пайваст кунед".
Истифодаи калид барои баробар паҳн кардани каналҳои "гарм".
Суратҳо барои муштариёни дер (сурат + дельта).
Кэши арзиши охирин (махсусан SSE) - барои муштарии хунук муфид аст.

13) Анти-намунаҳо

Қисмҳои калони бинариро тавассути SSE ё JSON тавассути WS ҷараён диҳед - зеркашии HTTP ва истинодро дар паём истифода баред.
Иҷозат танҳо дар вақти пайвастшавӣ ва набудани санҷиши такрорӣ барои ҷаласаҳои дароз.
Глобалии часпанда ба таври номувозинатӣ ва гиреҳҳои гарм.
Танаффусҳои ғайрифаъол/маҳдудиятҳо → пайвастҳои яхкардашуда ҳавзро мехӯранд.
Буферкунии SSE proxy/CDN → "вақти воқеӣ" дақиқаҳои таъхир мегардад.
Набудани пайдарпаӣ/офсет → пас аз пайвастшавӣ, муштарӣ тамомияти маълумотро аз даст медиҳад.

14) Рӯйхати назорати амалисозӣ

  • WS (дуҷониба) ё SSE (яктарафа) интихоб карда мешавад.
  • Вақтсанҷи танзимшуда, нигоҳдорӣ ва пайвастшавӣ (backoff + jitter).
  • Тартиби тарҳрезишуда/ҷуброн ва (барои SSE) 'id '/' Last-Event-ID'.
  • Андоза/суръат/пайвастшавӣ/квотаҳо, муҳофизати DOS муайян карда шудааст.
  • Proxy/ingress config: навсозӣ, proxy_buffering хомӯш (SSE), вақти хондан/фиристодан.
  • Миқёс: брокери паб/зер, дарвозаи мухлиси берунӣ, танҳо дар ҳолати зарурӣ часпанда.
  • Аутентификатсия: интиқоли аломати бехатар, гардиши бидуни танаффус.
  • Мушоҳида: ченакҳо, гузоришҳо, пайҳо; панели панелҳо ва огоҳиҳо.
  • Нақшаи озодкунӣ: пайвастҳои зебо ва холӣ, муштариро барои пайваст шудан сигнал диҳед.
  • Рӯзҳои бозӣ: танаффуси шабака, қатраҳои гиреҳ, изофабори брокер, RTTs дароз.

15) FAQ

Оё SSE метавонад тавассути CDN кэш карда шавад?
Одатан не: Ин ҷараёни инфиродӣ аст. Барои каналҳои ҷамъиятӣ - эҳтимолан бо TTL кӯтоҳ ва интиқол дода шавад, аммо шикастани "вақти воқеӣ" осон аст.

Оё Websocket дар болои HTTP/2/3 кор мекунад?
Браузери WS аз HTTP/1 сар мешавад. 1-навсозӣ; RFC 8441 барои h2 мавҷуд аст, дастгирӣ дар прокси/сервер алоҳида талаб карда мешавад. Бо h3 - дар ҳаракат; барои ҷараён, h3 дорои Web-Transport мебошад, аммо он API-и дигар аст.

GRPC vs WS барои браузер?
Браузери тоза GRPC намегӯяд; GRPC-Web тавассути Envoy лозим аст. Барои UI-ҳои интерактивӣ WS + REST аксар вақт осонтар аст.

16) Натиҷаҳо

Интернет Сокет - вақте ки ба шумо муколамаи воқеӣ ва канали паймоне лозим аст.
SSE - вақте ки ба шумо пахшкунии оддӣ ва боэътимод аз сервер ба муштарӣ лозим аст, мураккабии ҳадди аққал ва пайвастшавии автоматӣ.
Муваффақият дар фурӯш ин танаффус ва маҳдудиятҳои дуруст, барқароршавӣ аз офсет, паб/зергурӯҳ, танзимоти дурусти прокси ва мушоҳидаҳои дақиқ мебошад.

Contact

Тамос гиред

Барои саволҳо е дастгирӣ ба мо муроҷиат кунед.Мо ҳамеша омодаем!

Telegram
@Gamble_GC
Оғози интегратсия

Email — муҳим аст. Telegram е WhatsApp — ихтиерӣ.

Номи шумо ихтиерӣ
Email ихтиерӣ
Мавзӯъ ихтиерӣ
Паем ихтиерӣ
Telegram ихтиерӣ
@
Агар Telegram нависед — ҷавобро ҳамон ҷо низ мегиред.
WhatsApp ихтиерӣ
Формат: рамзи кишвар + рақам (масалан, +992XXXXXXXXX).

Бо фиристодани форма шумо ба коркарди маълумот розӣ ҳастед.