Junior
Веб-сокеттер деген эмне?
sobes.tech AI
AIден жооп
Websockets (Websockets) — бул TCP байланышы аркылуу жүргүзүлүүчү эки тараптуу байланыш протоколу, ал браузер менен сервердин ортосунда реалдуу убакытта маалымат алмашууга мүмкүндүк берет.
Традициялык HTTP суроолордон негизги айырмачылыктар:
- Эки тараптуу байланыш: Сервер алдын ала суроо-талапсыз маалымат жибере алат.
- Бир байланышы: Бир узакка созулган байланышты түзүү, ал ар бир маалымат алмашуу үчүн жаңы байланышты түзүү чыгымдарын жоготот (HTTP сыяктуу).
- Кайра кечиктирүүнү азайтуу: Байланышты түзүү, башталыштарды алмаштыруу жана кыска суроолор/жоопторду иштетүү үчүн убакыт аз талап кылынат.
Иштөө принциби:
- Handshake: Браузер атайын HTTP суроо жиберет серверге (
Upgrade: websocketжанаConnection: Upgradeбаштамалар менен). - Байланыш түзүү: Эгер сервер веб-сокеттерди колдосо, ал
101 Switching Protocolsкоду менен жооп берет, андан соң байланыш веб-сокет протоколуна өтөт. - Маалымат алмашуу: Байланыш түзүлгөндөн кийин, эки тарап каалаган убакта билдирүүлөрдү эркин алмаша алышат.
Колдонуу мисалдары:
- Онлайн оюндар
- Чаттар жана мессенжерлер
- Реалдуу убакытта маалымат жаңыртуулары (курстар, жаңылыктар)
- Коллаборативдүү инструменттер
Артыкчылыктары:
- Төмөн кечиктирүү
- Ресурстарды эффективдүү колдонуу (аз 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();