Junior
Ce sunt socket-urile web?
sobes.tech AI
Răspuns de la AI
Websockets (Websockets) sunt un protocol de comunicare bidirecțională printr-o singură conexiune TCP, care permite schimbul de date în timp real între browser și server.
Diferențele cheie față de solicitările HTTP tradiționale:
- Comunicare bidirecțională: Serverul poate trimite date către client fără o solicitare prealabilă din partea clientului.
- O singură conexiune: Se stabilește o conexiune de lungă durată, eliminând costurile de stabilire a unei noi conexiuni pentru fiecare schimb de date (ca în HTTP).
- Reducerea întârzierii: Se petrece mai puțin timp pentru stabilirea conexiunii, schimbul de anteturi și procesarea solicitărilor/răspunsurilor scurte.
Principiul de funcționare:
- Handshake: Browserul trimite o solicitare HTTP specială către server (cu anteturile
Upgrade: websocketșiConnection: Upgrade). - Stabilirea conexiunii: Dacă serverul suportă websocket-uri, răspunde cu codul
101 Switching Protocols, după care conexiunea trece la protocolul websocket. - Transmiterea datelor: După stabilirea conexiunii, ambele părți pot schimba mesaje liber în orice moment.
Exemple de utilizare:
- Jocuri online
- Chat-uri și mesagerie
- Actualizări în timp real ale datelor (cotări, știri)
- Instrumente colaborative
Avantaje:
- Întârziere scăzută
- Utilizare eficientă a resurselor (mai puțin overhead)
- Comunicare bidirecțională în timp real
Dezavantaje:
- Necesită suport atât pe partea clientului (browser), cât și pe partea serverului.
- Implementare mai complexă comparativ cu solicitările HTTP simple.
Exemplu de cod client în JavaScript:
// crearea unui websocket
const socket = new WebSocket('wss://example.com/websocket');
// handler pentru deschiderea conexiunii
socket.onopen = function(event) {
console.log('Conexiune stabilită');
socket.send('Salut, server!'); // trimitere mesaj către server
};
// handler pentru primirea mesajelor
socket.onmessage = function(event) {
console.log('Mesaj primit de la server: ' + event.data);
};
// handler pentru închiderea conexiunii
socket.onclose = function(event) {
if (event.wasClean) {
console.log(`Conexiune închisă în mod curat, cod=${event.code} motiv=${event.reason}`);
} else {
console.log('Conexiune întreruptă'); // de exemplu, din cauza unei erori de rețea
}
};
// handler pentru eroare
socket.onerror = function(error) {
console.error(`Eroare websocket: ${error}`);
};
// închiderea conexiunii (dacă este necesar)
// socket.close();