2 години сну за ніч - 3 чашки кавусі і з 9 працювати) ось відійшов на обід і думаю яж обіцяв - треба написати
і як раз народилась нова рубрика - ну шо я маю вам сказать
Протоколи для QA - WebSocket
Чесно, WebSocket - це той випадок, коли REST уже не тягне, а реального часу хочеться прямо тут і зараз.
І так що я маю вам сказать,
WebSocket - це прямий живий канал між клієнтом і сервером, де обидві сторони можуть говорити коли хочуть, а не лише «запит → відповідь».
REST - це як листи надсилати.
WebSocket - це як дзвінок, де ви обидва говорите одночасно.
Як відбувається підключення - тут все просто
Клієнт робить handshake через HTTP: щось типо такого ви бачити
GET /ws HTTP/1.1
Upgrade: websocket
Connection: Upgrade
А Сервер каже:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
І все з цього моменту HTTP більше нема, є чистий WebSocket-канал.
Далі вже API летить у вигляді фреймів: текстові/ бінарні / ping/pong / close
І все це без перестворення з’єднання.
Тобто
Як працює?
Клієнт відкриває WebSocket-з’єднання (handshake через HTTP).
Сервер каже: «Ок, підключаю!».
Після цього вони спілкуються без переривання:
клієнт може надсилати повідомлення
сервер може надсилати події (events) у будь-який момент
З’єднання закривається лише коли одна зі сторін каже close.
За часту це використовують
Чати, Нотифікації, Біржі / live-update цін, Трекинг кур’єрів на мапі, Відеоконференції та дзвінки, Онлайн-ігри
Спитаєте як потестити WebSocket через Postman?
Так-так, Postman вміє WebSocket-и
- Відкриваємо Postman → New → WebSocket
- Пишемо адресу:
-
ws://localhost:8080/ws
- Підключаємося
- Відправляємо тестове повідомлення:
{ "action": "ping" }- Дивимося, що сервер відповідає
- Для live-систем тестую івенти так:
- робите дію в UI
- дивиьесь, які саме WebSocket-пакети полетіли
- ну звіряю payload з документацією
- перевіряєте порядок подій (це часта бага!) и все) впринципі є офіційна дока як це налаштувати - там думаю ви зрозумієте https://learning.postman.com/docs/sending-requests/websocket/websocket-overview/
Автомейшенам ще проше через wscat пишите и все буде бігати само) я так роблю у себе на курсах - люди яки бачили скажуть шо круто) а може і не))
а і забув ключове Чому WebSocket сам не закривається без ping/pong?
У WebSocket є одна важлива особливість, про яку багато хто не знає:
WebSocket-з’єднання саме по собі “вічне”.
Якщо ви його не пінгуєте - сервер думає, що все ок, навіть якщо клієнт давно помер.
І тут заходить ping/pong
Ping - сервер періодично надсилає «ти живий?».
Pong - клієнт автоматично відповідає «я тут».
Якщо Pong не прийшов у певний час → сервер розуміє, що клієнта нема, і закриває з’єднання.
якщо прям дуже коротко то
Ping/pong - це heartbeat WebSocket-а.
Без нього у вас будуть “зомбі-з’єднання” і нестабільна робота в real-time сервісах.
Вроді нічого не пропустив)
Всім гарного дня і настрою
Обняв 🤗🤗🤗