Sobes.tech
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:

  1. Handshake: Brauzer maxsus HTTP so’rovi yuboradi (sarlavhalar bilan Upgrade: websocket va Connection: Upgrade).
  2. Ulanishni o’rnatish: Agar server websocketlarni qo’llab-quvvatlasa, u 101 Switching Protocols kodi bilan javob beradi, shundan so’ng ulanish websocket protokoliga o’tadi.
  3. 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();