Sobes.tech
Junior

Šta su veb-soketi?

sobes.tech АИ

Одговор од АИ

Websockets (Websockets) su protokol dvosmerne komunikacije preko jednog TCP-veze, koji omogućava razmenu podataka između pregledača i servera u realnom vremenu.

Ključne razlike u odnosu na tradicionalne HTTP zahteve:

  • Dvosmerna komunikacija: Server može slati podatke klijentu bez prethodnog zahteva od strane klijenta.
  • Jedna veza: Uspostavlja se jedna dugotrajna veza, čime se eliminišu troškovi uspostavljanja nove veze za svaku razmenu podataka (kao kod HTTP).
  • Smanjenje kašnjenja: Manje vremena se troši na uspostavljanje veze, razmenu zaglavlja i obradu kratkih zahteva/odgovora.

Princip rada:

  1. Handshake: Pregledač šalje poseban HTTP zahtev serveru (sa zaglavljima Upgrade: websocket i Connection: Upgrade).
  2. Uspostavljanje veze: Ako server podržava websockets, on odgovara sa kodom 101 Switching Protocols, nakon čega veza prelazi u websocket protokol.
  3. Prenos podataka: Nakon uspostavljanja veze, obe strane mogu slobodno razmenjivati poruke u bilo koje vreme.

Primeri upotrebe:

  • Online igre
  • Čatovi i poruke
  • Real-time ažuriranja podataka (cene, vesti)
  • Kolaborativni alati

Prednosti:

  • Nisko kašnjenje
  • Efikasno korišćenje resursa (manji overhead)
  • Dvosmerna komunikacija u realnom vremenu

Nedostaci:

  • Potrebna je podrška i na strani klijenta (pregledača), i na strani servera.
  • Složenija implementacija u poređenju sa jednostavnim HTTP zahtevima.

Primer klijentskog koda na JavaScript-u:

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

// handler za otvaranje veze
socket.onopen = function(event) {
  console.log('Veza uspostavljena');
  socket.send('Zdravo, server!'); // slanje poruke serveru
};

// handler za primanje poruke
socket.onmessage = function(event) {
  console.log('Primljena poruka od servera: ' + event.data);
};

// handler za zatvaranje veze
socket.onclose = function(event) {
  if (event.wasClean) {
    console.log(`Veza zatvorena čisto, kod=${event.code} razlog=${event.reason}`);
  } else {
    console.log('Veza prekinuta'); // na primer, zbog problema sa mrežom
  }
};

// handler za grešku
socket.onerror = function(error) {
  console.error(`Greška websoketa: ${error}`);
};

// zatvaranje veze (po potrebi)
// socket.close();