Что такое WebSockets
WebSockets — это двунаправленный, полнодуплексный протокол связи, инициируемый поверх HTTP. Он часто используется в современных веб-приложениях для потоковой передачи данных и другого асинхронного трафика.
В этом разделе мы узнаем разницу между HTTP и WebSockets, опишем, как устанавливаются соединения WebSocket, и покажем, как выглядят сообщения WebSocket.
В чём разница между HTTP и WebSockets?
Большая часть коммуникаций между веб-браузерами и веб-сайтами использует HTTP. При HTTP клиент отправляет запрос, а сервер возвращает ответ. Обычно ответ приходит сразу, и транзакция завершается. Даже если сетевое соединение остаётся открытым, оно будет использовано для отдельной транзакции запроса и ответа.
Некоторые современные веб-сайты используют WebSockets. Соединения WebSocket инициируются поверх HTTP и обычно являются долгоживущими. Сообщения могут отправляться в любом направлении в любое время и не являются транзакционными по своей природе. Соединение, как правило, остаётся открытым и простаивает до тех пор, пока клиент или сервер не будут готовы отправить сообщение.
WebSockets особенно полезны в ситуациях, когда требуются низкая задержка или сообщения, инициируемые сервером, например для потоковой передачи финансовых данных в реальном времени.
Как устанавливаются соединения WebSocket?
Соединения WebSocket обычно создаются с помощью клиентского JavaScript, например:
var ws = new WebSocket("wss://normal-website.com/chat");Для установления соединения браузер и сервер выполняют рукопожатие WebSocket поверх HTTP. Браузер отправляет запрос рукопожатия WebSocket примерно такого вида:
GET /chat HTTP/1.1
Host: normal-website.com
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
Connection: keep-alive, Upgrade
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
Upgrade: websocketЕсли сервер принимает соединение, он возвращает ответ рукопожатия WebSocket примерно такого вида:
На этом этапе сетевое соединение остаётся открытым и может использоваться для отправки сообщений WebSocket в любом направлении.
Как выглядят сообщения WebSocket?
После установления соединения WebSocket сообщения могут асинхронно отправляться в любом направлении — клиентом или сервером.
Простое сообщение можно отправить из браузера с помощью клиентского JavaScript, как показано ниже:
В принципе, сообщения WebSocket могут содержать любой контент или формат данных. В современных приложениях часто используется JSON для передачи структурированных данных в сообщениях WebSocket.
Например, чат-бот на базе WebSockets может отправить такое сообщение:
Last updated