WebSocket — client va server o‘rtasida doimiy, ikki tomonlama aloqa kanalini yaratadigan web protokol. U browser va serverga bir-biriga real vaqt rejimida ma’lumot yuborish imkonini beradi.
WebSocket chat, live notification, online game, real-time dashboard va collaborative ilovalarda ishlatiladi.
Vazifasi
WebSocket quyidagi vazifalarni bajaradi:
- client va server o‘rtasida doimiy connection yaratish;
- real-time ma’lumot almashish;
- serverdan clientga darhol xabar yuborish;
- chat va notification tizimlarini qo‘llash;
- live dashboard va monitoring yaratish;
- pollingga ehtiyojni kamaytirish;
- ikki tomonlama communication tashkil qilish.
Masalan, UzbekDevs’da real-time chat bo‘lsa, yangi xabarlar WebSocket orqali darhol kelishi mumkin.
WebSocket qanday ishlaydi?
WebSocket connection HTTP request orqali boshlanadi, keyin protocol upgrade qilinadi.
Oddiy jarayon:
- browser serverga HTTP request yuboradi;
- requestda WebSocketga o‘tish so‘raladi;
- server upgrade’ni qabul qiladi;
- doimiy WebSocket connection ochiladi;
- client va server bir-biriga message yuboradi;
- connection yopilguncha kanal ochiq turadi.
Bu model oddiy HTTP request-response modelidan farq qiladi.
ws va wss
WebSocket ikki asosiy scheme bilan ishlaydi:
ws://— shifrlanmagan WebSocket;wss://— TLS bilan himoyalangan WebSocket.
Production muhitda odatda wss:// ishlatiladi, chunki u HTTPS kabi secure connection beradi.
HTTP bilan farqi
HTTP odatda request-response modelida ishlaydi: client so‘rov yuboradi, server javob qaytaradi.
WebSocket esa:
- doimiy connection saqlaydi;
- server ham clientga xohlagan vaqtda xabar yubora oladi;
- real-time aloqa uchun qulay;
- ko‘p qayta HTTP request yuborishni kamaytiradi.
Polling bilan farqi
Pollingda client serverdan ma’lumot bor-yo‘qligini takror so‘raydi.
WebSocket farqi:
- connection doimiy ochiq turadi;
- server yangi ma’lumotni o‘zi yuboradi;
- ortiqcha requestlar kamayadi;
- real-time javob tezroq bo‘ladi.
Polling oddiyroq, WebSocket esa real-time tizimlar uchun qulayroq.
Message
WebSocket connection ichida ma’lumotlar message sifatida yuboriladi.
Message formatlari:
Ko‘p web ilovalarda JSON message ishlatiladi.
Connection lifecycle
WebSocket connection hayotiy davri quyidagilardan iborat:
- connection ochish;
- handshake;
- message almashish;
- ping/pong orqali connectionni tekshirish;
- error holatlari;
- connection yopish;
- qayta ulanish.
Frontend va backend WebSocket connection holatini boshqarishi kerak.
Ping va pong
Ping/pong WebSocket connection tirikligini tekshirish uchun ishlatiladi.
- ping — bir tomon tekshiruv xabari yuboradi;
- pong — ikkinchi tomon javob qaytaradi.
Bu connection uzilib qolganini aniqlashga yordam beradi.
Authentication
WebSocket connection ham authentication talab qilishi mumkin.
Authentication usullari:
- cookie-based session;
- token query parameter orqali;
- header orqali token;
- connection ochilgandan keyin auth message;
- JWT token.
Authentication modeli ilova arxitekturasiga bog‘liq.
Scaling muammosi
WebSocket doimiy connection saqlagani uchun scaling oddiy HTTP’dan murakkabroq bo‘lishi mumkin.
Scalingda muhim jihatlar:
- connectionlar soni;
- load balancer sozlamasi;
- sticky session;
- message broker;
- pub/sub;
- server memory;
- reconnect mexanizmi.
Ko‘p serverli WebSocket tizimlarda Redis Pub/Sub yoki message broker ishlatilishi mumkin.
WebSocket va SSE farqi
SSE — Server-Sent Events. U serverdan clientga bir tomonlama event yuborish uchun ishlatiladi.
Farqlar:
- WebSocket ikki tomonlama;
- SSE asosan serverdan clientga;
- WebSocket chat va game uchun qulay;
- SSE notification yoki live feed uchun sodda bo‘lishi mumkin.
Dasturlashdagi o‘rni
WebSocket real-time web ilovalar yaratishda muhim protokol hisoblanadi. U chat, notification, dashboard, multiplayer game va live collaboration tizimlarida client-server o‘rtasida doimiy ikki tomonlama aloqa beradi.
Bog‘liq tushunchalar
HTTP, HTTPS, TCP, Real-time, Webhook, Pub/Sub, Message broker, API, Browser, Server