WebSocket — это сетевой транспортный протокол, обеспечивающий полнодуплексную связь через одно TCP-соединение. Он расположен на прикладном уровне модели OSI.
WebSocket и HTTP — это не одно и то же протокол,Хотя оба они расположены на прикладном уровне модели OSI.,И все они полагаются на базовый протокол TCP. У них свой формат протокола,Применяйте разные сценарии. Сам протокол WebSocket не зависит от протокола HTTP.,Но на начальном этапе установки WebSocket полагается на HTTP.,Потому что процесс рукопожатия WebSocket использует HTTP-запросы для обновления протокола.
URL-адрес протокола WebSocket аналогичен HTTP. Схема протокола открытого текста — ws:, а соответствующий протокол HTTP — http:. Схема протокола WebSocket, основанного на SSL/TLS, — wss:, а соответствующего протокола HTTP — https:. Порт по умолчанию для ws — 80, а порт по умолчанию для wss — 443.
В веб-коммуникациях уже есть протокол HTTP, зачем нам разрабатывать протокол WebSocket? Должно быть, протокол HTTP не может удовлетворить потребности определенных сценариев. Давайте сначала разберем проблемы с протоколом HTTP, а затем разберем, как работает WebSocket.
HTTP — это модель связи запрос-ответ, то есть клиент активно отправляет запрос запроса на сервер, а сервер отвечает данными ответа. Сервер не может активно отправлять ресурсы клиенту, поэтому клиент и сервер работают асимметрично по протоколу HTTP, который представляет собой полудуплексную связь.
Когда клиент отправляет HTTP-запрос на сервер, между клиентом и сервером открывается TCP-соединение, а после получения ответа TCP-соединение разрывается. Каждый HTTP-запрос открывает отдельное TCP-соединение с сервером. Если клиент отправляет 10 запросов на сервер, будет открыто 10 отдельных TCP-соединений.
Протокол HTTP имеет следующие проблемы:
Поэтому протокол WebSocket был введен для решения проблем HTTP.
Процесс взаимодействия с протоколом WebSocket показан ниже. Весь процесс разделен на два этапа. Этап 1: Выполните рукопожатие. Этап 2: Произведите передачу данных.
Из соображений совместимости рукопожатие реализовано с использованием HTTP. Сообщение, отправленное клиентом, представляет собой запрос HTTP-сообщения с заголовком Upgrade.
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Сообщение, которое сервер отвечает клиенту, выглядит следующим образом.
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat
Если значение Sec-WebSocket-Accept не соответствует ожидаемому значению,Отсутствует поле заголовка или код состояния HTTP не 101.,тогда соединение не будет установлено,И не будет Отправить данныерамка。
Формат кадра данных WebSocket следующий:
значение кода операции | значение |
---|---|
0 | продолжить кадр |
1 | текстовый фрейм |
2 | двоичный кадр |
3-7 | бронировать |
8 | закрыть кадр |
9 | пинг-фрейм |
10 | рамка для понга |
11-15 | бронировать |
Веб-приложения реального времени используют соединения WebSocket для отображения данных, отправленных сервером. Например, на торговом веб-сайте или при торговле акциями, где цены постоянно колеблются, задержка при отображении цен клиентам должна быть как можно меньше.
В игровом приложении клиент продолжает отправлять данные на сервер, а затем сервер отправляет данные обратно клиенту без обновления пользовательского интерфейса.
Большинство чат-приложений используют WebSocket для обеспечения бесперебойного и быстрого канала связи между пользователями.
Как и различные облачные документы, такие как документы Tencent, графитовые документы и т. д.
Интерфейсная часть может получать данные из внутренней части через канал WebSocket и автоматически обновлять диаграммы данных, такие как гистограммы, круговые диаграммы и т. д. Он широко используется в области статистического анализа данных и больших цифровых экранов.
Обмен обновлениями местоположения в режиме реального времени в мобильных приложениях.
Распознавание речи, возвращающее распознанный текст в реальном времени.