Junior
Web-soketlar nima?
sobes.tech AI
AIdan javob
Websockets (Websockets) — bu, TCP ulanishi orqali ikki tomonlama aloqa protokoli bo‘lib, brauzer va server o‘rtasida real vaqt rejimida ma’lumot almashishni ta’minlaydi.
An’anaviy HTTP so’rovlaridan asosiy farqlari:
- Ikki tomonlama aloqa: Server, mijozdan oldindan so’rov olmadan ma’lumot yuborishi mumkin.
- Yagona ulanish: Bir marta uzoq davom etadigan ulanish o’rnatiladi, bu esa har bir ma’lumot almashinuvi uchun yangi ulanish o’rnatish xarajatlarini bartaraf etadi (HTTP kabi).
- ** kechikishni kamaytirish:** Ulashni o’rnatish, sarlavhalarni almashish va qisqa so’rov/ javoblarni ishlash uchun kamroq vaqt sarflanadi.
Ishlash prinsipi:
- Handshake: Brauzer maxsus HTTP so’rovi yuboradi (sarlavhalar bilan
Upgrade: websocketvaConnection: Upgrade). - Ulanishni o’rnatish: Agar server websocketlarni qo’llab-quvvatlasa, u
101 Switching Protocolskodi bilan javob beradi, shundan so’ng ulanish websocket protokoliga o’tadi. - Ma’lumotlarni uzatish: Ulanish o’rnatilgandan so’ng, har ikkala tomon istalgan vaqtda xabarlar bilan bemalol almashishlari mumkin.
Qo’llanilish misollari:
- Onlayn o’yinlar
- Chatlar va messenjalar
- Ma’lumotlarni real vaqt rejimida yangilash (kurslar, yangiliklar)
- Hamkorlik vositalari
Afzalliklari:
- Kam kechikish
- Resurslardan samarali foydalanish (kam overhead)
- Real vaqt rejimida ikki tomonlama aloqa
Kamchiliklari:
- Ikkala tomonning ham (brauzer va server) qo’llab-quvvatlashi talab qilinadi.
- Oddiy HTTP so’rovlariga nisbatan murakkabroq amalga oshirish.
JavaScriptda mijoz kodining misoli:
// websocket yaratish
const socket = new WebSocket('wss://example.com/websocket');
// ulanish ochilishi uchun handler
socket.onopen = function(event) {
console.log('Ulanish o’rnatildi');
socket.send('Salom, server!'); // serverga xabar yuborish
};
// xabar qabul qilish uchun handler
socket.onmessage = function(event) {
console.log('Serverdan olingan xabar: ' + event.data);
};
// ulanish yopilishi uchun handler
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Toza yopildi, kod=${event.code} sabab=${event.reason}`);
} else {
console.log('Ulanish uzildi'); // masalan, tarmoq muammosi tufayli
}
};
// xatolik uchun handler
socket.onerror = function(error) {
console.error(`Websocket xatosi: ${error}`);
};
// ulanishni yopish (zarur bo’lsa)
// socket.close();