Junior
Опишите неколико начина комуникације између сервера и клијента.
sobes.tech АИ
Одговор од АИ
Постоји неколико основних начина комуникације између клијента (прегледача) и сервера.
-
HTTP/HTTPS (Polling/Short Polling):
- Клијент шаље захтев серверу и чека одговор.
- Сервер обрађује захтев и шаље одговор.
- Код Short Polling-а, клијент периодично шаље захтеве серверу да провери да ли има ажурирања.
- Једноставно за имплементацију, али неефикасно за честе ажурирања због трошкова сваког захтева.
// Пример једноставног Short Polling-а function checkUpdates() { fetch('/api/updates') .then(response => response.json()) .then(data => { // Обрада добијених података }) .finally(() => { setTimeout(checkUpdates, 5000); // Поново за 5 секунди }); } checkUpdates(); -
Long Polling:
- Клијент шаље захтев серверу, који га држи отвореним док се не појаве нови подаци или не истекне временски ограничење.
- Када се појаве подаци, сервер одмах шаље одговор, а клијент шаље нови захтев.
- Ефикасније од Short Polling-а, али и даље постоји закашњење између добијања података и слања следећег захтева.
-
WebSockets:
- Стварају трајну двосмерну везу између клијента и сервера.
- Након успостављања везе, обе стране могу слати и примати податке у било које време без додатних HTTP захтева.
- Идеално за апликације у реалном времену (чатови, онлајн игре, обавештења).
const socket = new WebSocket('ws://localhost:8080'); socket.onopen = function(event) { console.log('Веза успостављена'); socket.send('Здраво сервер!'); }; socket.onmessage = function(event) { console.log('Дошло поруку од сервера:', event.data); }; socket.onclose = function(event) { if (event.wasClean) { console.log(`Веза је чисто затворена, код=${event.code}, разлог=${event.reason}`); } else { console.error('Веза је прекинута'); } }; socket.onerror = function(error) { console.error('Грешка WebSocket:', error); }; -
Server-Sent Events (SSE):
- Омогућавају серверу да шаље податке клијенту у једносмерној комуникацији преко HTTP везе.
- Клијент се претплаћује на ток догађаја са сервера.
- Погодно за случајеве када сервер шаље ажурирања клијенту, али клијент не шаље податке назад серверу (нпр. ток вести, приказ напредовања задатка).
const eventSource = new EventSource('/api/stream'); eventSource.onmessage = function(event) { console.log('Дошло догађај од сервера:', event.data); }; eventSource.onerror = function(error) { console.error('Грешка SSE:', error); eventSource.close(); // Затварање везе у случају грешке };
Свака метода има своје предности и недостатке, а избор зависи од конкретних захтева апликације у погледу учесталости ажурирања, обима података и потребе за двосмерном комуникацијом.