Junior
Aprakstiet dažus veidus, kā serveris un klients var sazināties.
sobes.tech AI
Atbilde no AI
Ir vairākas galvenās saziņas metodes starp klientu (pārlūkprogrammu) un serveri.
-
HTTP/HTTPS (Polling/Short Polling):
- Klients nosūta pieprasījumu serverim un gaida atbildi.
- Servers apstrādā pieprasījumu un nosūta atbildi.
- Ar Short Polling klients periodiski sūta pieprasījumus serverim, lai pārbaudītu jaunumus.
- Vienkārši realizējams, bet neefektīvs biežu atjauninājumu gadījumā dēļ papildu izmaksām katram pieprasījumam.
// Vienkārša Short Polling piemērs function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Apstrādā saņemtos datus }) .finally(() => { setTimeout(checkUpdates, 5000); // Atkārtojas pēc 5 sekundēm }); } checkUpdates(); -
Long Polling:
- Klients nosūta pieprasījumu serverim, kurš tur to atvērtu, kamēr nav jaunu datu vai nav beidzies laika limits.
- Kad dati ir pieejami, serveris nekavējoties nosūta atbildi, pēc tam klients nosūta jaunu pieprasījumu.
- Efektīvāks nekā Short Polling, bet joprojām ir aizkaves starp datu saņemšanu un nākamā pieprasījuma nosūtīšanu.
-
WebSockets:
- Izveido pastāvīgu divvirzienu savienojumu starp klientu un serveri.
- Pēc savienojuma izveides abas puses var sūtīt un saņemt datus jebkurā laikā bez papildu HTTP pieprasījumiem.
- Ideāli piemērots reāllaika lietojumprogrammām (čati, tiešsaistes spēles, paziņojumi).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Savienojums izveidots'); socket.send('Sveiki, server!'); }; socket.onmessage = function(event) { console.log('Saņemta ziņa no servera:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Savienojums slēgts tīri, kods=${event.code}, iemesls=${event.reason}`); } else { console.error('Savienojums pārtraukts'); } }; socket.onerror = function(error) { console.error('WebSocket kļūda:', error); }; -
Server-Sent Events (SSE):
- Ļauj serverim nosūtīt datus klientam vienvirziena režīmā caur HTTP savienojumu.
- Klients abonē uz notikumu plūsmu no servera.
- Piemērots gadījumiem, kad serveris sūta atjauninājumus klientam, bet klients neatgriež datus serverim (piemēram, ziņu plūsma, uzdevuma progresu attēlošana).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Saņemts notikums no servera:', event.data); }; eventSource.onerror = function(error) { console.error('SSE kļūda:', error); eventSource.close(); // Slēgt savienojumu kļūdas gadījumā };
Katram metodam ir savas priekšrocības un trūkumi, un izvēle ir atkarīga no konkrētajām lietojumprogrammas prasībām attiecībā uz atjauninājumu biežumu, datu apjomu un divvirzienu saziņas nepieciešamību.