Junior
Какви са уеб сокетите?
sobes.tech AI
Отговор от AI
Websockets (Websockets) е протокол за двупосочна комуникация чрез едно TCP свързване, който позволява обмен на данни в реално време между браузър и сървър.
Ключови разлики спрямо традиционните HTTP заявки:
- Двупосочна комуникация: Сървърът може да изпраща данни към клиента без предварителна заявка от страна на клиента.
- Едно свързване: Установява се едно дълготрайно свързване, което елиминира разходите за създаване на ново свързване за всеки обмен на данни (като при HTTP).
- Намаляване на закъснението: По-малко време се изразходва за установяване на връзката, обмен на заглавки и обработка на кратки заявки/отговори.
Принцип на работа:
- Handshake: Браузърът изпраща специална HTTP заявка към сървъра (с заглавки
Upgrade: websocketиConnection: Upgrade). - Установяване на връзка: Ако сървърът поддържа websocket-и, той отговаря с код
101 Switching Protocols, след което връзката преминава към websocket протокол. - Пренос на данни: След установяване на връзката, двете страни могат свободно да обменят съобщения по всяко време.
Примери за използване:
- Онлайн игри
- Чатове и месинджъри
- Реално-времеви актуализации на данни (котировки, новини)
- Колаборативни инструменти
Предимства:
- Ниска закъснение
- Ефективно използване на ресурси (по-малко overhead)
- Двупосочна комуникация в реално време
Недостатъци:
- Изисква поддръжка както от страна на клиента (браузър), така и от страна на сървъра.
- По-сложна реализация в сравнение с прости HTTP заявки.
Пример за клиентски код на JavaScript:
// създаване на websocket
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();