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:
- Handshake: Brauser saadab spetsiaalse HTTP-päringu serverile (
Upgrade: websocketjaConnection: Upgradepäistega). - Ühenduse loomine: Kui server toetab websockets, vastab ta koodiga
101 Switching Protocols, mille järel ühend läheb üle websocket-protokollile. - 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();