Junior
Kirjeldage mõnda viisi, kuidas server ja klient saavad omavahel suhelda.
sobes.tech AI
Vastus AI-lt
On olemas mõned peamised viisid kliendi (brauseri) ja serveri vaheliseks suhtluseks.
-
HTTP/HTTPS (Polling/Short Polling):
- Klient saadab serverile päringu ja ootab vastust.
- Server töötleb päringu ja saadab vastuse.
- Short Polling puhul saadab klient perioodiliselt päringuid serverile, et kontrollida uuendusi.
- Lihtne rakendada, kuid ebaefektiivne sagedaste uuenduste puhul, kuna iga päringuga kaasnevad kulud.
// Näide lihtsast Short Pollingust function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Töötle saadud andmeid }) .finally(() => { setTimeout(checkUpdates, 5000); // Korda 5 sekundi pärast }); } checkUpdates(); -
Long Polling:
- Klient saadab päringu serverile, mis hoiab seda avatud kuni uute andmete ilmumiseni või ajapiirangu täitumiseni.
- Kui andmed on saadaval, saadab server kohe vastuse, mille järel klient saadab uue päringu.
- Efektiivsem kui Short Polling, kuid endiselt on viivitus andmete saamise ja järgmise päringu saatmise vahel.
-
WebSockets:
- Loob püsiva kahepoolse ühenduse kliendi ja serveri vahel.
- Pärast ühenduse loomist saavad mõlemad pooled saata ja vastu võtta andmeid igal ajal ilma täiendavate HTTP-päringuteta.
- Ideaalne reaalajas rakendustele (vestlused, online-mängud, teavitused).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Ühendus loodud'); socket.send('Tere, server!'); }; socket.onmessage = function(event) { console.log('Saaud sõnum serverilt:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Ühendus suletud puhtalt, kood=${event.code}, põhjus=${event.reason}`); } else { console.error('Ühendus katkestati'); } }; socket.onerror = function(error) { console.error('WebSocket viga:', error); }; -
Server-Sent Events (SSE):
- Annab serveril võimaluse saata andmeid kliendile ühesuunalise HTTP-ühenduse kaudu.
- Klient tellib sündmuste voo serverilt.
- Sobib olukordadesse, kus server saadab uuendusi kliendile, kuid klient ei saada andmeid serverile vastusena (näiteks uudiste voog, ülesande edenemise kuvamine).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Saadud sündmus serverilt:', event.data); }; eventSource.onerror = function(error) { console.error('SSE viga:', error); eventSource.close(); // Sulge ühendus vea korral };
Iga meetodil on oma eelised ja puudused ning valik sõltub konkreetse rakenduse nõuetest uuenduste sageduse, andmemahtude ja kahepoolse suhtluse vajaduse osas.