WebSocket — технология, обеспечивающая скорость и непрерывность современного интернета.
HTTP и необходимость WebSockets
При обращении к сайту (например, интернет-магазину обуви) браузер отправляет HTTP-запрос, запрашивая данные для отображения страницы. Сервер отвечает, отправляя запрошенные данные, после чего соединение закрывается. Для получения новой информации требуется новый запрос.
В чате на сайте криптотрейдеров, например, получение новых сообщений проблематично, поскольку сервер не инициирует общение. Постоянное обновление страницы — неэффективно.
HTTP Polling
Существует HTTP Polling с двумя вариантами: Short Polling и Long Polling.
- Short Polling: Клиент периодически запрашивает у сервера новые данные («Есть что-нибудь новенькое?»). Сервер отвечает либо с новыми данными, либо с отрицательным ответом. Соединение закрывается после каждого ответа.
- Long Polling: Клиент отправляет запрос и ждёт ответа от сервера с обновлениями или таймаута. Соединение закрывается после ответа, и требуется новый запрос.
Оба метода неэффективны. Необходимо постоянное открытое соединение для обмена данными.
WebSockets: двунаправленное соединение
WebSockets — протокол, устанавливающий двунаправленное соединение с сервером, позволяющее отправлять и получать сообщения без отдельных запросов, поддерживающий постоянное открытое соединение до его разрыва одной из сторон. Это идеально подходит для приложений реального времени: чаты, онлайн-игры, обновляющиеся сводки новостей и т.п.
Работа WebSockets
При подключении к сайту или приложению происходит «рукопожатие»: браузер (клиент) отправляет HTTP-запрос о желании подключиться к сокету и получает подтверждение. Затем устанавливается TCP-соединение, гарантирующее доставку сообщений.
Наблюдение за WebSockets
Для наблюдения за работой WebSockets откройте панель разработчика (F12), перейдите во вкладку Network, включите фильтр WS, выберите соединение и перейдите на вкладку Messages. Вы увидите обмен сообщениями между браузером (зеленые стрелки) и сервером (красные стрелки) без лишних запросов.
Применение Polling
WebSockets эффективны, но Polling до сих пор используется. Причины – в комментариях.