Sobes.tech
Junior

Mis on veebisoketid?

sobes.tech AI

Vastus AI-lt

Websockets (Websockets) on kahepoolne sidevahelise ühenduse protokoll ühe TCP-ühenduse kaudu, mis võimaldab vahetada andmeid brauseri ja serveri vahel reaalajas.

Peamised erinevused tavapäraste HTTP-päringutega võrreldes:

  • Kahepoolne side: Server saab saata andmeid kliendile ilma eelneva päringuta kliendilt.
  • Üks ühendus: Loobub üks püsiv ühendus, mis kõrvaldab iga andmevahetuse jaoks uue ühenduse loomise kulud (nagu HTTP puhul).
  • Viivituse vähendamine: Vähem aega kulub ühenduse loomisele, päiste vahetamisele ja lühikeste päringute/vastuste töötlemisele.

Tööpõhimõte:

  1. Handshake: Brauser saadab spetsiaalse HTTP-päringu serverile (Upgrade: websocket ja Connection: Upgrade päistega).
  2. Ühenduse loomine: Kui server toetab websockets, vastab ta koodiga 101 Switching Protocols, mille järel ühend läheb üle websocket-protokollile.
  3. Andmete edastamine: Pärast ühenduse loomist saavad mõlemad pooled vabalt vahetada sõnumeid igal ajal.

Kasutusnäited:

  • Online-mängud
  • Vestlused ja sõnumid
  • Reaalajas andmeuuendused (kursid, uudised)
  • Koostöölahendused

Eelised:

  • Madal viivitus
  • Ressursside tõhus kasutamine (vähem overheadi)
  • Kahepoolne side reaalajas

Puudused:

  • Nõutav toetus nii kliendi (brauseri) kui ka serveri poolel.
  • Keerulisem rakendamine võrreldes lihtsate HTTP-päringutega.

Näide JavaScripti kliendikoodist:

// WebSocket'i loomine
const socket = new WebSocket('wss://example.com/websocket');

// ühenduse avamise käsitleja
socket.onopen = function(event) {
  console.log('Ühendus loodud');
  socket.send('Tere, server!'); // sõnumi saatmine serverile
};

// sõnumi vastuvõtu käsitleja
socket.onmessage = function(event) {
  console.log('Sõnum serverilt: ' + event.data);
};

// ühenduse sulgemise käsitleja
socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`Ühendus suletud puhtalt, kood=${event.code} põhjus=${event.reason}`);
  } else {
    console.log('Ühendus katkestatud'); // näiteks võrgu tõrke tõttu
  }
};

// vea käsitleja
socket.onerror = function(error) {
  console.error(`WebSocket'i viga: ${error}`);
};

// ühenduse sulgemine (vajadusel)
// socket.close();