WebSocket — mijoz va server o'rtasida real vaqtda ma'lumot almashish uchun doimiy ulanishni ta'minlaydigan to'liq dupleks aloqa protokolidir. An'anaviy HTTP so'rovlaridan farqli o'laroq, bu protokol bitta ulanishni o'rnatadi va uni qayta handshakesiz ikki tomonlama uzatish uchun ishlatadi. Mozilla Developer Network (2025) ma'lumotlariga ko'ra, WebSocket real-time ilovalarda HTTP polling bilan solishtirganda kechikishlarni 50% gacha kamaytiradi.
Asosiy ma'lumotlar
WebSocket — TCP ustida ishlaydigan va mijoz bilan server o'rtasida to'liq dupleks kanalni ta'minlaydigan aloqa protokolidir. U IETF tomonidan 2011 yilda RFC 6455 sifatida standartlashtirilgan va barcha zamonaviy brauzerlar, mobil platformalar va server freymvorklari tomonidan qo'llab-quvvatlanadi.
HTTPdan farqli o'laroq, bu erda mijoz so'rov yuboradi va javob oladi, WebSocket esa ikkala tomonga ulanish o'rnatilgandan keyin istalgan vaqtda xabar yuborishga imkon beradi. Bu uni tezkor yetkazib berish talab qiladigan stsenariylar uchun ideal qiladi: chatlar, bildirishnomalar, hujjatlarni birgalikda tahrirlash.
WebSocket protokoli dastlabki handshake uchun HTTP porti 80 yoki HTTPS porti 443 dan foydalanadi, keyin o'z protokoliga o'tadi — minimal sarlavha bilan, atigi 2 bayt, HTTPdagi 800+ bayt o'rniga. Bu xususiyat ko'p sonli xabarlarda sezilarli samaradorlik afzalligini beradi.
WebSocket ulanishi HTTP Upgrade so'rovi bilan boshlanadi, keyin protokol ikkilik ramka formatiga o'tadi. Ramkaning o'lchami 2 baytdan 2^63 baytgacha o'zgaradi, bu ham qisqa matnli xabarlarni, ham katta ikkilik ma'lumotlarni uzatishga imkon beradi. Xabarlarning fragmentatsiyasi, mijozdan serverga ma'lumotni maskalash va ulanishni saqlash uchun ping/pong qo'llab-quvvatlanadi.
WebSocket ulanishini o'rnatish jarayoni ikki bosqichdan iborat: handshake va ma'lumot uzatish. Handshake bosqichida mijoz Upgrade: websocket sarlavhasi bilan HTTP so'rovi yuboradi, server esa 101 Switching Protocols statusi bilan protokol o'zgarishini tasdiqlaydi. Shundan so'ng ulanish to'liq dupleks uzatish rejimiga o'tadi.
WebSocketdagi har bir xabar ramkalarga bo'linadi. Ramka opcode (matn, ikkilik ma'lumot, yopish, ping/pong), yuk uzunligi va mijoz ma'lumotlari uchun maskalash kalitini o'z ichiga oladi. Ramka fragmentlanishi mumkin — nazorat ramkalari (ping/pong) xabar fragmentlari orasida uzatilishi mumkin, bu uzoq uzatish vaqtida ulanishning uzilishini oldini oladi.
const ws = new WebSocket('wss://example.com/chat')
ws.addEventListener('open', () => {
console.log('Ulanish o'rnatildi')
ws.send('Salom, server!')
})
ws.addEventListener('message', (event) => {
console.log('Qabul qilindi:', event.data)
})
ws.addEventListener('close', () => {
console.log('Ulanish yopildi')
})
Yuqoridagi misolda mijob WebSocket obyektini yaratadi, himoyalangan wss:// URLni ko'rsatadi. Ulanish ochilgandan so'ng salomlashish xabari yuboriladi, message ishlovchisi esa serverdan javoblarni qabul qiladi. Yopilishda close ishlovchisi ishga tushadi — bu tarmoq uzilishida qayta ulanish uchun muhimdir.
WebSocket va HTTP o'rtasidagi asosiy farq o'zaro ta'sir modelidadir. HTTP so'rov-javob sxemasi bilan ishlaydi: mijob so'rov yuboradi, server javob qaytaradi, ulanish yopiladi. WebSocket esa ikkala tomondan istalgan vaqtda uzatishni boshlash mumkin bo'lgan doimiy kanal o'rnatadi.
Past kechikish va doimiy ma'lumot oqimini talab qiladigan ilovalar uchun WebSocket sezilarli darajada samaraliroq. HTTP Long Polling — server ma'lumot paydo bo'lguncha so'rovni ochiq ushlab turadigan alternativa — serverga qo'shimcha yuk yaratadi va ko'plab bir vaqtda ulanishlar tufayli xotira iste'molini oshiradi.
| Parametr | WebSocket | HTTP |
|---|---|---|
| Model | To'liq dupleks | So'rov-javob |
| Sarlavha | 2–14 bayt | 400–800 bayt |
| Doimiy ulanish | Ha, bitta | Yo'q, har so'rov uchun yangi |
| Kechikish | Past (1–5 ms) | Yuqori (50–200 ms) |
| Protokol | ws:// yoki wss:// | http:// yoki https:// |
High Performance Browser Networking (Grigorik, O’Reilly) ma'lumotlariga ko'ra, WebSocket real-time stsenariylarda tarmoq kechikishlarini HTTP Long Polling bilan solishtirganda 40–60% kamaytiradi, server yuki esa takroriy handshakelarning bartaraf etilishi tufayli 3–5 marta kamayadi.
Past kechikish va ikki tomonlama aloqa tufayli WebSocket keng doiradagi ilovalarda qo'llaniladi. Asosiy stsenariylarga tezkor xabar almashish, o'yinlarda holatni sinxronlash va moliyaviy tizimlarda bozor ma'lumotlarini uzatish kiradi.
WebSocket chat ilovalari uchun de-fakto standartga aylandi. Slack, Telegram Web va WhatsApp Web kabi platformalar xabarlarni tezkor yetkazib berish uchun WebSocketdan foydalanadi. Protokol matnli xabarlarni va fayllarni yagona kanal orqali yuborishga imkon beradi, ping/pong mexanizmi esa ulanishni faol ushlab turadi.
Ko'p o'yinchili brauzer va mobil o'yinlar o'yinchilar holatini sinxronlash uchun minimal kechikishni talab qiladi. WebSocket koordinatalar, harakatlar va hodisalarni HTTP so'rov kechikishlarisiz real vaqtda uzatadi. Socket.IO va Colyseus kabi freymvorklar protokol bilan past darajadagi ishni abstraksiya qilib, avtomatik qayta ulanish va xonalarni qo'shadi.
Birja terminallari va trading platformalari real vaqtda kotirovkalarni olish uchun WebSocketdan foydalanadi. Bir necha millisekundlik kechikish millionlab dollarga tushishi mumkin, shuning uchun moliyaviy APIlar — masalan, Binance WebSocket Streams, Coinbase Pro — bozor ma'lumotlari uchun aynan WebSocket interfeyslarini taqdim etadi.
Mobil ishlanmada WebSocket mahalliy APIlar orqali qo'llaniladi: iOSda URLSessionWebSocketTask va Androidda OkHttp WebSocket. Flutter uchun web_socket_channel kutubxonasi, React Native uchun esa react-native-websocket mavjud. IoT qurilmalari telemetriyani uzatish va boshqaruv buyruqlarini olish uchun WebSocketni qo'llaydi, chunki protokol doimiy HTTP-pollingdan kamroq energiya sarflaydi.
Node.js da ws kutubxonasi bilan server qismining namunasini ko'rib chiqaylik — bu JavaScript uchun WebSocketning eng mashhur tatbiqidir. Server ulanishlarni qabul qiladi, xabarlarni qayta ishlaydi va ularni barcha ulangan mijozlarga tarqatadi.
const WebSocket = require('ws')
const wss = new WebSocket.Server({ port: 8080 })
wss.on('connection', (ws) => {
console.log('Yangi mijob ulandi')
ws.on('message', (data) => {
console.log('Qabul qilindi:', data.toString())
ws.send('Server sizning xabaringizni qabul qildi')
})
ws.on('close', () => {
console.log('Mijob uzildi')
})
})
console.log('WebSocket serveri 8080 portida ishga tushirildi')
Server 8080 portida WebSocket.Server namunasini yaratadi va ulanishlarni kutadi. Har bir yangi mijozga alohida ws obyekti tayinlanadi, server bu obyekt orqali shaxsiy xabarlar yuborishi mumkin. Xabarlarni barcha mijozlarga tarqatish ulanishlar massivining ommaviy aylanishi orqali amalga oshiriladi. Ko'p sonli mijozlar (1000 dan ortiq) bo'lganda Redis orqali masshtablash va avtomatik qayta ulanishni qo'shadigan Socket.IO kabi kutubxonalardan foydalanish tavsiya etiladi.
wss.clients.forEach((client) => {
if (client.readyState === WebSocket.OPEN) {
client.send('Barcha ishtirokchilar uchun xabar')
}
})
Yuborishdan oldin readyState tekshiruvi majburiydir: agar mijob allaqachon uzilgan bo'lsa, send chaqiruvi xatolik beradi. WebSocket.OPEN bayrog'i ulanishning faol ekanligini va xabarning yetkazilishini kafolatlaydi.
Mobil iOS ilovalari uchun WebSocket iOS 13 dan boshlab mavjud bo'lgan URLSessionWebSocketTask orqali tatbiq etiladi. Sessiya wss:// protokoli URL bilan topshiriq yaratadi, so'ng send va receive metodlari chaqiriladi. Xabarlarni qabul qilish avvalgi xabarni qayta ishlagandan so'ng keyingi xabarni kutadigan davomiy receive rekursiyasi orqali tashkil etilishi mumkin, bu qayta ulanmasdan doimiy ma'lumot qabul qilishni ta'minlaydi. Android uchun OkHttp WebSocket ishlatiladi, u onOpen, onMessage, onClosing va onClosed callbacklari bilan o'xshash interfeys, shuningdek ulanish uzilganda avtomatik qayta ulanishni taqdim etadi.
Mobil ilovalarda WebSocket bilan ishlashda hayot aylanishini boshqarishni hisobga olish muhimdir: ilova fonda ishlashga o'tganda ulanish tizim tomonidan uzilishi mumkin. iOS da sceneDidBecomeActive delegati orqali oldingi planga qaytganda ulanishni qayta tiklash kerak. Android da ulanishni saqlash uchun Lifecycle-aware komponentlari yoki Service dan foydalanish kerak. Qo'shimcha ravishda, qayta ulanishda exponential backoff ni tatbiq etish tavsiya etiladi — urinishlar orasidagi intervalni 1 soniyadan 30 soniyagacha oshirish, vaqtinchalik tarmoq muammolarida serverga haddan tashqari yuk yaratmaslik uchun.
Ko'p beriladigan savollar
WebSocket ikkala tomon istalgan vaqtda ma'lumot yuborishi mumkin bo'lgan doimiy to'liq dupleks ulanishni o'rnatadi. HTTP so'rov-javob sxemasi bilan ishlaydi, bunda har bir almashish yangi ulanish va to'liq sarlavhalarni talab qiladi. WebSocket bitta TCP kanali va atigi 2–14 bayt sarlavhalardan foydalanadi, bu kechikishlarni keskin kamaytiradi.
WebSocket himoyalanmagan ulanishlar (ws://) uchun port 80 va himoyalangan ulanishlar (wss://) uchun port 443 dan foydalanadi. Bu qo'shimcha sozlamalarsiz ko'pchilik proksi serverlar va korporativ firewalllardan o'tishga imkon beradi. Port 443 TLS shifrlash tufayli production muhitlari uchun tavsiya etiladi.
Ha, WebSocket barcha mobil platformalarda qo'llab-quvvatlanadi. iOS da mahalliy URLSessionWebSocketTask sinfi iOS 13 dan mavjud. Android da — OkHttp WebSocket sinfi va standart java.net.WebSocket. React Native uchun react-native-websocket kutubxonasi mavjud.
WebSocket Secure — TLS ustida ishlaydigan himoyalangan protokol versiyasidir. Barcha ma'lumotlar HTTPSdagi kabi shifrlanadi. WSS production ilovalari uchun majburiydir, ayniqsa WebSocket orqali autentifikatsiya tokenlari yoki shaxsiy ma'lumotlar uzatilganda.
Asosiy alternativlar: HTTP Long Polling (server so'rovni ochiq ushlab turadi), Server-Sent Events (serverdan bir tomonlama oqim) va WebRTC Data Channel (peer-to-peer aloqa). Server-Sent Events tatbiq etish osonroq, ammo mijozdan serverga yuborishni qo'llab-quvvatlamaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.