Що таке WebSocket?

pic

Що таке WebSocket?

WebSocket — це протокол для двостороннього, низькозатратного зв'язку між клієнтом (client) та сервером (server). Він дозволяє створювати двосторонній потік даних, перевищуючи традиційну модель запит/відповідь на основі HTTP. У 2011 році він був офіційно затверджений IETF стандартом RFC 6455.

Як працює WebSocket?

Протокол WebSocket починається з процесу "ручного стискання" (Handshake) між клієнтом і сервером. Ось кроки, які детально описують цей процес:

1. Початковий запит ("Initial Request"): Підключення WebSocket ініціюється через HTTP запит GET. Цей запит використовує заголовок "Upgrade", щоб запитати перехід від HTTP протоколу до WebSocket протоколу.

Приклад HTTP запиту для стискання:

GET /chat HTTP/1.1  
Host: example.com  
Upgrade: websocket  
Connection: Upgrade  
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==  
Sec-WebSocket-Version: 13

2. Відповідь сервера ("Server Response"): Сервер повертає HTTP 101 відповідь, що підтверджує прийняття запиту і оновлення протоколу до WebSocket.

Приклад відповіді:

HTTP/1.1 101 Switching Protocols  
Upgrade: websocket  
Connection: Upgrade  
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

3. Відправка повідомлень ("Data Frames"): Після встановлення з'єднання дані надсилаються у форматі кадрів (frame). Повідомлення WebSocket можуть бути текстовими або бінарними.

4. Завершення з'єднання: Як клієнт, так і сервер можуть закрити з'єднання, використовуючи відповідний "close frame".

Застосування WebSocket

Протокол WebSocket може бути використаний в різних сценаріях застосування:

1. Реальний час для чат-додатків: Застосовується в додатках, де користувачі повинні мати миттєвий обмін повідомленнями, таких як Slack або WhatsApp Web.

2. Потоки живих даних (фінансові дані): Ідеально підходить для динамічних даних, таких як ціни на акції, криптовалюти або фондові індекси.

3. Онлайн-ігри: Задовольняє потребу в швидкому та безперервному зв'язку в багатокористувацьких іграх.

4. IoT пристрої: Дозволяє пристроям Інтернету Речей (наприклад, системи розумного дому) зв'язуватися з серверами в реальному часі.

5. Сповіщення в реальному часі: Системи, що надають миттєві сповіщення, такі як новини, спортивні результати або електронні листи.

Порівняння WebSocket та HTTP

pic

WebSocket та HTTP мають різні моделі комунікації. Основні відмінності між цими двома протоколами можна узагальнити наступним чином:

  • Тип комунікації: HTTP забезпечує односпрямований зв'язок, тоді як WebSocket пропонує двосторонню комунікацію. Це дозволяє клієнту і серверу асинхронно обмінюватися даними.
  • Статус з'єднання: Протокол HTTP є безстанним (stateless), а WebSocket — станоутримуючий (stateful). Це дає WebSocket можливість підтримувати сталий канал зв'язку.
  • Продуктивність: HTTP встановлює нове з'єднання при кожному обміні даними, що потребує більше ресурсів. WebSocket використовує постійне з'єднання, що дозволяє використовувати менше пропускної здатності і забезпечує швидший обмін даними.
  • Сфери застосування: HTTP зазвичай використовується для запит/відповідь, а WebSocket — в реальних часах для застосунків, що потребують швидкого обміну даними.
    Ці додатки можуть включати в себе системи чату, потоки фінансових даних та онлайн-ігри.

Використання WebSocket: Покрокове кодування

Приклад сервера на Node.js

Для створення WebSocket сервера можна використовувати Node.js та бібліотеку ws.

Код сервера:

const WebSocket = require('ws');  

const server = new WebSocket.Server({ port: 8080 });  

server.on('connection', (ws) => {  
 console.log('Нове з’єднання');  

 ws.on('message', (message) => {  
 console.log(`Повідомлення отримано: ${message}`);  
 ws.send(`Ехо: ${message}`);  
 });  

 ws.on('close', () => {  
 console.log('З’єднання закрито');  
 });  
});  

console.log('WebSocket сервер працює.');

Код клієнта:

const socket = new WebSocket('ws://localhost:8080');  

socket.onopen = () => {  
 console.log('З’єднання встановлено');  
 socket.send('Привіт, сервер!');  
};  

socket.onmessage = (event) => {  
 console.log(`Повідомлення від сервера: ${event.data}`);  
};  

socket.onclose = () => {  
 console.log('З’єднання закрито');  
};

Переваги WebSocket

  • Низька затримка: Передача даних без необхідності додаткових заголовків ("header") або HTTP-запитів.
  • Ефективність: Менше використання пропускної здатності та низьке споживання ресурсів.
  • Гнучкість: Багатий обмін даними за допомогою текстових, бінарних даних та кадрів ping/pong.

WebSocket відіграє критичну роль у сучасних додатках, що потребують реального часу для передачі даних. Завдяки високій продуктивності та здатності підтримувати постійне з’єднання, він надає розробникам широкі можливості для вирішення різноманітних задач. Використовуючи надану інформацію та приклади коду, ви можете почати використовувати WebSocket у своїх проектах!

Перекладено з: WebSocket Nedir?

Leave a Reply

Your email address will not be published. Required fields are marked *