Sobes.tech
Junior

Веб-сокеттер деген эмне?

sobes.tech AI

AIден жооп

Websockets (Websockets) — бул TCP байланышы аркылуу жүргүзүлүүчү эки тараптуу байланыш протоколу, ал браузер менен сервердин ортосунда реалдуу убакытта маалымат алмашууга мүмкүндүк берет.

Традициялык HTTP суроолордон негизги айырмачылыктар:

  • Эки тараптуу байланыш: Сервер алдын ала суроо-талапсыз маалымат жибере алат.
  • Бир байланышы: Бир узакка созулган байланышты түзүү, ал ар бир маалымат алмашуу үчүн жаңы байланышты түзүү чыгымдарын жоготот (HTTP сыяктуу).
  • Кайра кечиктирүүнү азайтуу: Байланышты түзүү, башталыштарды алмаштыруу жана кыска суроолор/жоопторду иштетүү үчүн убакыт аз талап кылынат.

Иштөө принциби:

  1. Handshake: Браузер атайын HTTP суроо жиберет серверге (Upgrade: websocket жана Connection: Upgrade баштамалар менен).
  2. Байланыш түзүү: Эгер сервер веб-сокеттерди колдосо, ал 101 Switching Protocols коду менен жооп берет, андан соң байланыш веб-сокет протоколуна өтөт.
  3. Маалымат алмашуу: Байланыш түзүлгөндөн кийин, эки тарап каалаган убакта билдирүүлөрдү эркин алмаша алышат.

Колдонуу мисалдары:

  • Онлайн оюндар
  • Чаттар жана мессенжерлер
  • Реалдуу убакытта маалымат жаңыртуулары (курстар, жаңылыктар)
  • Коллаборативдүү инструменттер

Артыкчылыктары:

  • Төмөн кечиктирүү
  • Ресурстарды эффективдүү колдонуу (аз overhead)
  • Реалдуу убакытта эки тараптуу байланыш

Кемчиликтери:

  • Клиент тараптан (браузер) жана сервер тараптан колдоо талап кылынат.
  • Жөнөкөй HTTP суроолорго салыштырмалуу көбүрөөк ишке ашыруу татаал.

JavaScript тилиндеги мисал:

// веб-сокет түзүү
const socket = new WebSocket('wss://example.com/websocket');

// ачылуу иштикаруучу
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.log('Байланыш үзүлдү'); // мисалы, тармактык көйгөйдөн улам
  }
};

// ката иштикаруучу
socket.onerror = function(error) {
  console.error(`WebSocket ката: ${error}`);
};

// байланышты жабуу (керек болсо)
// socket.close();