Sobes.tech
Junior

Опишите неколико начина комуникације између сервера и клијента.

sobes.tech АИ

Одговор од АИ

Постоји неколико основних начина комуникације између клијента (прегледача) и сервера.

  1. 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();
    
  2. Long Polling:

    • Клијент шаље захтев серверу, који га држи отвореним док се не појаве нови подаци или не истекне временски ограничење.
    • Када се појаве подаци, сервер одмах шаље одговор, а клијент шаље нови захтев.
    • Ефикасније од Short Polling-а, али и даље постоји закашњење између добијања података и слања следећег захтева.
  3. 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);
    };
    
  4. 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(); // Затварање везе у случају грешке
    };
    

Свака метода има своје предности и недостатке, а избор зависи од конкретних захтева апликације у погледу учесталости ажурирања, обима података и потребе за двосмерном комуникацијом.