Skip to main content

Двоспрямованість WebSocket

Коротко

WebSocket - двоспрямований (bidirectional) протокол, тому що і клієнт, і сервер можуть ініціювати передачу даних у будь-який момент часу - без повторних запитів, без очікування, і без закриття з'єднання.

1. Як це виглядає в порівнянні з HTTP

ВластивістьHTTPWebSocket
Хто ініціює обмінЛише клієнтКлієнт і сервер
Скільки живе з'єднанняДо завершення запитуПоки не закрито вручну
Передача данихОдноспрямована (request → response)Двоспрямована (обидва можуть слати повідомлення)
Використовується TCPТакТак
Підходить для real-timeНіТак

Приклад:

  • HTTP: Клієнт → запит → сервер відповідає → з'єднання закривається.
  • WebSocket: Клієнт ↔ сервер: обидва можуть безперервно слати повідомлення одне одному в будь-який час.

2. Чому це можливо технічно

WebSocket будується поверх одного TCP-з'єднання, яке:

  • встановлюється один раз (через HTTP "upgrade");
  • залишається відкритим;
  • дозволяє обом сторонам асинхронно надсилати повідомлення (фрейми).

Повідомлення передаються у вигляді фреймів (frames) - маленьких бінарних блоків:

  • клієнт може надіслати Text чи Binary фрейм;
  • сервер може відповісти своїми фреймами;
  • обидві сторони можуть надсилати їх у будь-який момент, навіть одночасно.

3. Приклад "живого" обміну

Після встановлення з'єднання:

javascript
Клієнт → "Hello, сервере!" Сервер → "Привіт, клієнте!" Клієнт → "Надсилаю координати {x:10,y:20}" Сервер → "Координати отримано" Сервер → "Усім: гравець перемістився"

Жодних нових HTTP-запитів - просто двосторонній потік повідомлень. Це робить WebSocket ідеальним для чатів, ігор, торгових платформ, сповіщень і дашбордів.

4. Що відбувається "під капотом"

  1. Клієнт робить звичайний HTTP-запит із заголовками:
javascript
Upgrade: websocket Connection: Upgrade
  1. Сервер відповідає:
javascript
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade
  1. З'єднання "перемикається" з HTTP на WebSocket. Тепер це вже не запит-відповідь, а постійний двоспрямований TCP-канал.

5. Візуально

javascript
HTTP: Client ----request----> Server Client <----response--- Server (з'єднання закрито) WebSocket: Client <===============> Server (одне з'єднання, обидва можуть писати й читати)

6. Чому це важливо

Без двоспрямованості було б неможливо реалізувати:

  • сповіщення в реальному часі;
  • чати й месенджери;
  • стрімінг даних (наприклад, ціни на біржі);
  • онлайн-ігри;
  • оновлення стану без перезапиту сторінки.

7. Підсумовуємо

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

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.