Одно соединение вместо постоянных проверок

Обычный веб-запрос устроен как короткий обмен: браузер просит данные, сервер отвечает, соединение обычно закрывается. Если странице нужно узнать, появилось ли что-то новое, ей приходится снова и снова отправлять запросы. Между такими проверками обновление может уже ждать на сервере, но браузер об этом ещё не знает.

WebSocket меняет саму схему обмена. Сначала браузер устанавливает соединение с сервером, а затем оба могут отправлять данные по нему, пока оно открыто. Серверу не нужно ждать следующего запроса от клиента: он сам передаёт событие, как только оно возникает.

Почему это полезно для чатов и не только

Представьте групповой чат. При постоянных проверках каждый открытый экран периодически спрашивает сервер: «Есть новые сообщения?» Даже если ответа нет, такие проверки создают лишний обмен. С WebSocket сервер отправляет сообщение участникам сразу после его появления, а ответы пользователей идут обратно по тому же каналу.

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

Постоянный канал требует управления

Открытое соединение нужно поддерживать и закрывать, когда оно больше не требуется. Если сеть пропала, канал может оборваться, и приложению придётся обнаружить это и подключиться заново. Поэтому WebSocket особенно полезен, когда обмен должен идти часто или серверу важно первым сообщать об изменениях; для редких запросов обычная схема может оказаться проще.

Разница заметна в поведении страницы: вместо того чтобы регулярно стучать в дверь и проверять, пришёл ли ответ, браузер оставляет линию открытой — и сервер может позвать его сам.