WebSockets - это технология, используемая для работы в сети. Когда Интернет был построен на идее, что задача клиента - запрашивать данные с сервера, а задача сервера - выполнять эти запросы. Веб-приложения сильно выросли и теперь потребляют больше данных, чем когда-либо прежде. Больше всего их сдерживала традиционная HTTP-модель транзакций, инициируемых клиентом.

Один из способов решения этой проблемы - стратегия, известная как длительный опрос. Это включает в себя поддержание HTTP-соединения открытым до тех пор, пока у сервера не появятся данные, которые нужно передать клиенту. Проблема всех этих решений в том, что они несут накладные расходы HTTP. Латентность - состояние, которое существует, но еще не развивается или проявляется. Каждый раз, когда вы делаете HTTP-запрос, на сервер передаются заголовки и данные cookie. Это может привести к достаточно большому объему данных, которые необходимо передать, что, в свою очередь, увеличивает задержку. Многие из этих заголовков и файлов cookie на самом деле не нужны для выполнения запроса клиента.

WebSockets - это способ создания постоянного соединения с низкой задержкой, которое может поддерживать транзакции, инициированные клиентом или сервером. WebSockets обеспечивают постоянное соединение между клиентом и сервером, которое обе стороны могут использовать для начала отправки данных в любое время. Клиент устанавливает соединение WebSocket посредством процесса, известного как рукопожатие WebSocket. Этот процесс начинается с того, что клиент отправляет серверу обычный HTTP-запрос. В этот запрос включен заголовок upgrade, который информирует сервер о том, что клиент желает установить соединение WebSocket.

Если сервер поддерживает протокол WebSocket, он соглашается на обновление и сообщает об этом через заголовок upgrade в ответе. Когда рукопожатие завершено, первоначальное HTTP-соединение заменяется соединением WebSocket, которое использует то же самое базовое соединение TCP / IP. На этом этапе любая из сторон может начать отправку данных.

С помощью WebSockets вы можете передавать столько данных, сколько захотите, без выполнения всех HTTP-запросов. Данные передаются через WebSocket в виде сообщений, каждое из которых состоит из одного или нескольких фреймов, содержащих данные, которые вы отправляете (полезная нагрузка). Чтобы гарантировать, что сообщение может быть правильно реконструировано, когда оно достигает клиента, каждый кадр имеет префикс из 4–12 байтов данных о полезной нагрузке, что упрощает тегирование передаваемых данных. Использование этой системы обмена сообщениями на основе кадров помогает уменьшить объем передаваемых данных, не связанных с полезной нагрузкой, поскольку для этого требуются только данные, необходимые для отображения на странице, что приводит к значительному сокращению задержки.

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

WebSockets имеет три интерфейса: Websocket, CloseEvent и MessageEvent. WebSocket - это основной интерфейс для подключения к серверу WebSocket, а затем отправки и получения данных по соединению. CloseEvent отправляется объектом WebSocket при закрытии соединения. MessageEvent - это событие, отправляемое объектом WebSocket при получении сообщения от сервера.