> For the complete documentation index, see [llms.txt](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://reloaderlev.gitbook.io/russian-goit-node-js-new-program/vebsokety/kak-proiskhodit-obmen-dannymi-po-vebsoket-protokolu.md).

# Как происходит обмен данными по вебсокет протоколу?

Для начала, давайте рассмотрим один из возможных сценариев работы http-протокола:&#x20;

1. Один из клиентов сервера делает запрос на создание поста в соц. сети.
2. Сервер сохраняет его.&#x20;
3. Другой клиент, который хочет увидеть посты пользователя, сможет их увидеть только после того, как самостоятельно сделает запрос на сервер для извлечения актуальных данных (перезагрузить страницу, откроет страницу в новой вкладке и т. Д.)&#x20;

Тоесть сервер отсылает новые данные клиенту только если клиент самостоятельно отправит ему запрос. **В рамках HTTP протокола** (за исключением HTTP Push технологии) **сервер не может отправить клиенту данные по своей инициативе**.&#x20;

Для того, чтобы сделать обмен данными в реальном времени возможным, клиент и сервер устанавливают непрерывное socket-соединение, по которому передают данные друг другу при любой необходимости. То есть, с помощью веб-сокетов, мы можем реализовать такой сценарий:&#x20;

1. Один из клиентов сервера делает запрос на создание поста в соц. сети.
2. Сервер сохраняет его.
3. Так как другой клиент заинтересован в прочтении поста, созданного выше, и на данный момент подключен к серверу через веб-сокет, то сервер отправляет новосозданный пост клиенту сразу же после его создания.&#x20;
4. При желании, любая из сторон (сервер или клиент) может закрыть вебсокет соединения.&#x20;

Если для социальных сетей моментальное получение данных не так важно, то для систем, где пользователю желательно как можно быстрее отреагировать на изменение определенных данных (торговая биржа, аукцион и т. д.) - это технологическая необходимость.
