Junior
Aprašykite keletą būdų, kaip serveris ir klientas gali bendrauti.
sobes.tech AI
Atsakymas iš AI
Yra keletas pagrindinių būdų, kaip bendrauja klientas (naršyklė) ir serveris.
-
HTTP/HTTPS (Polling/Short Polling):
- Klientas siunčia užklausą serveriui ir laukia atsakymo.
- Serveris apdoroja užklausą ir siunčia atsakymą.
- Short Polling atveju, klientas periodiškai siunčia užklausas serveriui, kad patikrintų naujienas.
- Paprasta įgyvendinti, bet neefektyvu dažnoms naujinimams dėl papildomų išlaidų kiekvienam užklausimui.
// Pavyzdys paprasto Short Polling function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Apdoroti gautus duomenis }) .finally(() => { setTimeout(checkUpdates, 5000); // Kartoti po 5 sekundžių }); } checkUpdates(); -
Long Polling:
- Klientas siunčia užklausą serveriui, kuris ją laiko atvirą, kol neatsiranda nauji duomenys arba nepasibaigia laiko limitas.
- Kai duomenys atsiranda, serveris nedelsdamas siunčia atsakymą, o klientas siunčia naują užklausą.
- Efektyviau nei Short Polling, bet vis dar yra delsimas tarp duomenų gavimo ir kitos užklausos siuntimo.
-
WebSockets:
- Sukuria nuolatinį, dvipusį ryšį tarp kliento ir serverio.
- Po ryšio sukūrimo, abi pusės gali siųsti ir gauti duomenis bet kuriuo metu be papildomų HTTP užklausų.
- Idealiai tinka realaus laiko programoms (chatai, internetiniai žaidimai, pranešimai).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Ryšys užmegztas'); socket.send('Sveiki, server!'); }; socket.onmessage = function(event) { console.log('Gauta žinutė iš serverio:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Ryšys užbaigtas švariai, kodas=${event.code}, priežastis=${event.reason}`); } else { console.error('Ryšys nutrauktas'); } }; socket.onerror = function(error) { console.error('WebSocket klaida:', error); }; -
Server-Sent Events (SSE):
- Leidžia serveriui siųsti duomenis klientui vienpusiai per HTTP ryšį.
- Klientas prenumeruoja įvykių srautą iš serverio.
- Tinka situacijoms, kai serveris siunčia atnaujinimus klientui, bet klientas neatsako duomenimis (pvz., naujienų srautas, užduoties progreso rodymas).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Gauta įvykių iš serverio:', event.data); }; eventSource.onerror = function(error) { console.error('SSE klaida:', error); eventSource.close(); // Užverti ryšį klaidos atveju };
Kiekvienas metodas turi savo privalumus ir trūkumus, ir pasirinkimas priklauso nuo konkrečių programos reikalavimų dėl atnaujinimų dažnumo, duomenų kiekio ir dvipusės ryšio poreikio.