Перейти к содержанию

Начало урока

Реальное время с WebSockets

Держите открытый двусторонний канал между сервером и клиентом вместо опроса изменений.

Главная идея: Обычный HTTP работает по схеме запрос/ответ: клиент спрашивает, сервер отвечает, соединение закрывается. Такая модель не позволяет серверу заговорить первым. WebSocket превращает одно HTTP-соединение в постоянный полнодуплексный канал, который остаётся открытым, поэтому любая из сторон может отправить сообщение в тот же миг, когда ей есть что сказать -- это фундамент чатов, живых дашбордов, многопользовательских игр и совместных редакторов.
К концу вы сможете:
  • объяснить рукопожатие-апгрейд WebSocket и его отличие от опроса;
  • построить низкоуровневый сервер на ws и сервер «всё включено» на Socket.IO;
  • рассылать обновления, использовать комнаты и широковещание сразу многим клиентам;
  • удерживать соединения живыми с помощью heartbeat и восстанавливаться после обрывов через переподключение;
  • оценивать реальные компромиссы: сырой протокол против фреймворка и масштабирование по процессам.

1. От запрос/ответ к живому соединению

Вы уже знаете REST: клиент шлёт запрос, сервер шлёт ответ, готово. Чтобы узнать о новых данных, клиент должен спросить снова. Самый старый приём -- опрос (polling): дёргать GET /messages каждые несколько секунд. Это работает, но тратит запросы, когда ничего не изменилось, и добавляет задержку (новое сообщение ждёт следующего опроса). Долгий опрос (long-polling) лучше: он держит запрос открытым, пока не появятся данные, но это всё ещё один ответ на событие и постоянные переподключения.

WebSocket решает корень проблемы. Клиент открывает обычный HTTP-запрос с заголовком Upgrade: websocket; сервер соглашается ответом 101 Switching Protocols; с этого момента то же самое TCP-соединение становится двунаправленным потоком кадров (frames). Никаких новых рукопожатий на каждое сообщение, и сервер может слать данные когда угодно.

HTTP-опрос Клиент Сервер GET /messages (пусто) повтор без конца WebSocket Клиент Сервер Upgrade: websocket 101 Switching кадры, в обе стороны
Опрос заново открывает запрос на каждую проверку; WebSocket делает рукопожатие один раз, а затем кадры идут в обе стороны по одному открытому соединению.

Аналогия. Опрос -- это как звонить в магазин каждую минуту и спрашивать «есть новости?». WebSocket -- это оставить линию открытой: как только появляется новость, любой из вас просто говорит -- без повторного дозвона.

Продолжите этот урок на YourAIZone

В полном уроке — объяснение целиком, разобранные примеры, частые ошибки, тесты с мгновенной проверкой и ИИ-репетитор. Начните сразу как гость или создайте аккаунт, чтобы сохранять прогресс.

В полном уроке

  • Объяснение целиком
  • Разобранные примеры
  • Частые ошибки и как их избежать
  • Тестовые вопросы: 15
  • ИИ-репетитор, который отвечает на вопросы по теме
  • Отслеживание прогресса для ученика, родителей и учителя