Что такое WebSocket и как он работает
Что проверяют
Не определение, а умение выбрать способ доставки событий и описать его так, чтобы разработка и тестирование не додумывали. Аналитику этот вопрос задают, когда в системе появляются живые статусы, уведомления или дашборд, и выбор нужно обосновать.
Как отвечать
Сначала суть. WebSocket это протокол поверх TCP с постоянным двусторонним соединением. Клиент шлёт обычный HTTP-запрос с заголовком Upgrade, сервер отвечает кодом 101, после чего обе стороны обмениваются кадрами, пока соединение живо. Отличие от HTTP в том, что сервер может писать первым и не ждать запроса.
Дальше сравнение, которого ждут:
- периодический опрос: просто и кешируется, но задержка равна интервалу, а число лишних запросов растёт вместе с числом клиентов;
- Server-Sent Events: односторонний поток от сервера с переподключением из коробки, хватает для лент и уведомлений;
- WebSocket: нужен, когда поток идёт в обе стороны и часто, это чат, совместное редактирование, торговый терминал, живая карта;
- вебхуки: доставка между системами, а не в браузер пользователя.
В требованиях по WebSocket описывают перечень событий и схему сообщения, направление каждого, гарантии доставки и порядок, авторизацию при подключении и её протухание, поведение при обрыве и дозагрузку пропущенного, предельную частоту и размер сообщения, коды закрытия.
Где спотыкаются
Пишут «в реальном времени» и не раскрывают это. Без допустимой задержки, частоты событий и числа одновременных клиентов выбор не обосновать, а проверить требование невозможно.
Описывают только счастливый путь. Соединение рвётся всегда: мобильная сеть, сон устройства, перезапуск сервиса. Пока в постановке нет правил переподключения и добора пропущенных событий, каждый разработчик решит это по-своему, а тестировщику нечего проверять.
Выбирают WebSocket по привычке, потому что так современнее. Он тянет за собой состояние на стороне сервера, липкие сессии на балансировщике, отдельный мониторинг соединений и сложности с корпоративными прокси. Если данные идут только от сервера и нечасто, эта цена не окупается.