Двоспрямованість WebSocket
Коротко
WebSocket - двоспрямований (bidirectional) протокол, тому що і клієнт, і сервер можуть ініціювати передачу даних у будь-який момент часу - без повторних запитів, без очікування, і без закриття з'єднання.
1. Як це виглядає в порівнянні з HTTP
| Властивість | HTTP | WebSocket |
|---|---|---|
| Хто ініціює обмін | Лише клієнт | Клієнт і сервер |
| Скільки живе з'єднання | До завершення запиту | Поки не закрито вручну |
| Передача даних | Односпрямована (request → response) | Двоспрямована (обидва можуть слати повідомлення) |
| Використовується TCP | Так | Так |
| Підходить для real-time | Ні | Так |
Приклад:
- HTTP: Клієнт → запит → сервер відповідає → з'єднання закривається.
- WebSocket: Клієнт ↔ сервер: обидва можуть безперервно слати повідомлення одне одному в будь-який час.
2. Чому це можливо технічно
WebSocket будується поверх одного TCP-з'єднання, яке:
- встановлюється один раз (через HTTP "upgrade");
- залишається відкритим;
- дозволяє обом сторонам асинхронно надсилати повідомлення (фрейми).
Повідомлення передаються у вигляді фреймів (frames) - маленьких бінарних блоків:
- клієнт може надіслати
TextчиBinaryфрейм; - сервер може відповісти своїми фреймами;
- обидві сторони можуть надсилати їх у будь-який момент, навіть одночасно.
3. Приклад "живого" обміну
Після встановлення з'єднання:
Клієнт → "Hello, сервере!"
Сервер → "Привіт, клієнте!"
Клієнт → "Надсилаю координати {x:10,y:20}"
Сервер → "Координати отримано"
Сервер → "Усім: гравець перемістився"Жодних нових HTTP-запитів - просто двосторонній потік повідомлень. Це робить WebSocket ідеальним для чатів, ігор, торгових платформ, сповіщень і дашбордів.
4. Що відбувається "під капотом"
- Клієнт робить звичайний HTTP-запит із заголовками:
Upgrade: websocket
Connection: Upgrade- Сервер відповідає:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade- З'єднання "перемикається" з HTTP на WebSocket. Тепер це вже не запит-відповідь, а постійний двоспрямований TCP-канал.
5. Візуально
HTTP:
Client ----request----> Server
Client <----response--- Server
(з'єднання закрито)
WebSocket:
Client <===============> Server
(одне з'єднання, обидва можуть писати й читати)6. Чому це важливо
Без двоспрямованості було б неможливо реалізувати:
- сповіщення в реальному часі;
- чати й месенджери;
- стрімінг даних (наприклад, ціни на біржі);
- онлайн-ігри;
- оновлення стану без перезапиту сторінки.
7. Підсумовуємо
WebSocket вважається двоспрямованим, тому що сервер і клієнт можуть незалежно один від одного ініціювати надсилання даних через одне постійне з'єднання, лишаючись підключеними, доки одна зі сторін його не закриє.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.