Сети и протоколы
WebSocket: тест с выбором ответа
Шесть вопросов поперёк всего юнита. Ни один не про заучивание определения — каждый отражает решение, которое senior-инженер принимает, пока real-time-сервис деградирует под нагрузкой.
Убедись, что связываешь upgrade, формат frame, выбор транспорта, backpressure, переподключение и потолки масштабирования в единую операционную модель — тот синтез, к которому вели отдельные уроки.
Коллега предлагает открыть сырой TCP-сокет на отдельном порту, чтобы пропустить HTTP-upgrade и 'сэкономить round-trip'. Почему это неверное рассуждение?
Кастомный WebSocket-клиент (вне браузера) шлёт твоему серверу немаскированные frame в стиле server-to-client. Должен ли сервер их принимать и зачем вообще нужен masking?
Дашборд пушит ~5 обновлений в минуту 100k пользователям, которые ничего не шлют обратно. Инженер тянется за WebSocket. Что лучше по умолчанию и почему?
Память broadcast-сервера стабильно растёт под нагрузкой, пока не срабатывает OOM killer; 100 из 10 000 клиентов на медленных мобильных каналах. Каков механизм и первое надёжное исправление?
Ты раскатываешь новый билд; все 10 миллионов подключённых клиентов отваливаются с кодом 1006 и переподключаются. Клиент использует exponential backoff, но без jitter. Почему сервер всё равно с трудом восстанавливается?
Два WebSocket-сервера за балансировщиком. User A на Server 1 шлёт сообщение в чат, оно должно дойти до User B на Server 2. Sticky sessions включены. Почему одного sticky-роутинга мало и что закрывает разрыв?
Сквозная линия юнита — одна операционная модель: upgrade переиспользует существующее соединение, поэтому общая инфраструктура его маршрутизирует; framing и обязательный client masking защищают провод; выбор транспорта (WebSocket против SSE против long-polling) следует за направлением потока данных; backpressure — каноничный сбой, на который отвечает high-water mark; переподключение должно быть с jitter, иначе оно становится thundering herd; а горизонтальный масштаб требует pub/sub для fan-out плюс sticky sessions для per-connection state. Каждый production-инцидент в юните сводится к этим рычагам.