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:
- Handshake: Pregledač šalje poseban HTTP zahtev serveru (sa zaglavljima
Upgrade: websocketiConnection: Upgrade). - Uspostavljanje veze: Ako server podržava websockets, on odgovara sa kodom
101 Switching Protocols, nakon čega veza prelazi u websocket protokol. - 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();