Sobes.tech
Junior

Veb-soketlər nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Websockets (Websockets) — bu, TCP bağlantısı vasitəsilə ikitərəfli əlaqə protokoludur və brauzer ilə server arasında real vaxt rejimində məlumat mübadiləsinə imkan verir.

Ənənəvi HTTP sorğularından əsas fərqlər:

  • İkitərəfli əlaqə: Server, müştəridən əvvəlcədən sorğu almadan məlumat göndərə bilər.
  • Yalnız bir əlaqə: Uzunmüddətli əlaqə qurulur, bu da hər məlumat mübadiləsi üçün yeni əlaqənin qurulması xərclərini aradan qaldırır (HTTP kimi).
  • Gecikmənin azaldılması: Əlaqənin qurulması, başlıqların dəyişdirilməsi və qısa sorğu/cavabların işlənməsi üçün daha az vaxt sərf olunur.

İş prinsipi:

  1. Handshake: Brauzer xüsusi HTTP sorğusu göndərir (Upgrade: websocketConnection: Upgrade başlıqları ilə).
  2. Əlaqənin qurulması: Əgər server websocketləri dəstəkləyirsə, 101 Switching Protocols kodu ilə cavab verir və əlaqə websocket protokolünə keçir.
  3. Məlumatların ötürülməsi: Əlaqə qurulduqdan sonra, hər iki tərəf istənilən vaxt mesajlar mübadiləsi edə bilər.

İstifadə nümunələri:

  • Onlayn oyunlar
  • Çat və mesajlaşma
  • Məlumatların real vaxt yeniləmələri (kurslar, xəbərlər)
  • Əməkdaşlıq alətləri

Üstünlüklər:

  • Aşağı gecikmə
  • Resursların səmərəli istifadəsi (daha az overhead)
  • Real vaxtda ikitərəfli əlaqə

Çatışmazlıqlar:

  • Həm müştəri (brauzer), həm də server tərəfi dəstək tələb edir.
  • Sadə HTTP sorğularına nisbətən daha mürəkkəb tətbiq.

JavaScript-də müştəri kodu nümunəsi:

// websocket yaradılması
const socket = new WebSocket('wss://example.com/websocket');

// əlaqənin açılması üçün handler
socket.onopen = function(event) {
  console.log('Əlaqə quruldu');
  socket.send('Salam, server!'); // serverə mesaj göndərmək
};

// mesajların alınması üçün handler
socket.onmessage = function(event) {
  console.log('Serverdən alınan mesaj: ' + event.data);
};

// əlaqənin bağlanması üçün handler
socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`Təmiz şəkildə bağlandı, kod=${event.code} səbəb=${event.reason}`);
  } else {
    console.log('Əlaqə kəsildi'); // məsələn, şəbəkə nasazlığı səbəbindən
  }
};

// xəta üçün handler
socket.onerror = function(error) {
  console.error(`Websocket xətası: ${error}`);
};

// əlaqəni bağlamaq (lazım olarsa)
// socket.close();