Spec-Zone.ru › Web APIs

API WebSocket (Вебсокеты)

Примечание: Эта функция доступна в Веб-воркерах.

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

API WebSocket предоставляет два альтернативных механизма для создания и использования подключений веб-сокетов: интерфейс WebSocket и интерфейс WebSocketStream.

  • Интерфейс WebSocket стабилен и имеет хорошую поддержку в браузерах и на серверах. Однако он не поддерживает обратную загрузку. В результате, когда сообщения поступают быстрее, чем приложение может их обработать, оно либо заполнит память устройства буферизацией этих сообщений, либо станет неотзывчивым из-за 100%-ной загрузки процессора, или и то, и другое.
  • Интерфейс WebSocketStream — это альтернатива WebSocket на основе Promise. Он использует API потоков для обработки приема и отправки сообщений, что означает, что подключения к сокетам могут автоматически использовать обратную загрузку потоков, регулируя скорость чтения или записи, чтобы избежать узких мест в приложении. Однако WebSocketStream не является стандартным и в настоящее время поддерживается только в одном движке рендеринга.

Кроме того, ожидается, что API WebTransport заменит API WebSocket во многих приложениях. WebTransport — это универсальный API низкого уровня, который предоставляет обратную загрузку и многие другие функции, не поддерживаемые ни WebSocket ни WebSocketStream, такие как однонаправленные потоки, доставка сообщений в произвольном порядке и ненадежная передача данных через датаграммы. WebTransport сложнее в использовании, чем WebSockets, и его поддержка в разных браузерах не такая широкая, но он позволяет реализовывать сложные решения. Если стандартные подключения WebSocket подходят для вашего случая использования и вам нужна широкая совместимость с браузерами, вы должны использовать API WebSocket, чтобы быстро начать работу. Однако, если ваше приложение требует нестандартного пользовательского решения, то вы должны использовать API WebTransport.

Примечание: Хотя подключение WebSocket функционально несколько похоже на стандартные сокеты Unix, они не связаны.

Интерфейсы

WebSocket

Основной интерфейс для подключения к серверу WebSocket и отправки и получения данных по подключению.

WebSocketStream Нестандартный

Интерфейс на основе промисов для подключения к серверу WebSocket; использует потоки для отправки и получения данных по подключению.

CloseEvent

Событие, отправленное объектом WebSocket при закрытии подключения.

MessageEvent

Событие, отправленное объектом WebSocket при получении сообщения с сервера.

Связанные HTTP-заголовки

HTTP-заголовки используются в рукопожатии WebSocket:

Sec-WebSocket-Key

Заголовок HTTP-запроса, содержащий nonce от клиента. Он используется в рукопожатии открытия WebSocket для проверки того, что клиент явно намерен открыть WebSocket. Он добавляется браузером автоматически.

Sec-WebSocket-Accept

HTTP заголовок ответа, используемый в рукопожатии открытия WebSocket, чтобы указать, что сервер готов обновить подключение до WebSocket. Значение в директиве вычисляется из значения Sec-WebSocket-Key в соответствующем запросе.

Sec-WebSocket-Version

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

Sec-WebSocket-Protocol

HTTP-заголовок, который в запросах указывает поддерживаемые клиентом подпротоколы в предпочтительном порядке. В ответах он указывает подпротокол, выбранный сервером из предпочтений клиента.

Sec-WebSocket-Extensions

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

Руководства

  • Создание приложений-клиентов WebSocket
  • Создание серверов WebSocket
  • Создание сервера WebSocket на C#
  • Создание сервера WebSocket на Java
  • Создание сервера WebSocket на JavaScript (Deno)
  • Использование WebSocketStream для создания клиента

Инструменты

  • AsyncAPI: Спецификация для описания архитектур с событийно-ориентированной обработкой, основанных на протоколах, таких как WebSocket. Вы можете использовать его для описания API на основе WebSocket так же, как вы бы описывали API REST с помощью спецификации OpenAPI. Узнайте почему стоит рассмотреть использование AsyncAPI с WebSocket и как это сделать.
  • µWebSockets: Высокомасштабируемая реализация сервера и клиента WebSocket для C++11 и Node.js.
  • Socket.IO: Протокол передачи данных сторонних разработчиков, основанный на длинном опросе/WebSocket для Node.js.
  • SocketCluster: Система публикации/подписки на основе WebSocket для Node.js с акцентом на масштабируемость.
  • WebSocket-Node: Реализация API сервера WebSocket для Node.js.
  • Total.js: Фреймворк веб-приложений для Node.js (Пример: чат WebSocket)
  • SignalR: SignalR будет использовать WebSockets по умолчанию, когда они доступны, и плавно переходить к другим методам и технологиям, когда они недоступны, при этом код вашего приложения останется неизменным.
  • Caddy: Веб-сервер, способный проксировать произвольные команды (stdin/stdout) в виде websocket.
  • ws: популярная библиотека клиента и сервера WebSocket для Node.js.
  • cowboy: Cowboy — небольшой, быстрый и современный HTTP-сервер для Erlang/OTP с поддержкой WebSocket.
  • ZeroMQ: ZeroMQ — это встраиваемая сетевая библиотека, которая передает сообщения через процессы, IPC, TCP, UDP, TIPC, многоадресную рассылку и WebSocket.
  • WebSocket King: Инструмент клиента для разработки, тестирования и работы с серверами WebSocket.
  • PHP WebSocket Server: Сервер, написанный на PHP, для обработки подключений через websockets wss:// или ws:// и обычных сокетов по ssl://, tcp://
  • Django Channels: Библиотека Django, которая добавляет поддержку WebSocket (и других протоколов, требующих длительных асинхронных подключений).
  • (Phoenix) Channels: Масштабируемая система реального времени с использованием WebSocket в фреймворке Elixir Phoenix.
  • Phoenix LiveView: Опыты интерактивных веб-страниц в реальном времени через WebSocket в фреймворке Elixir Phoenix.
  • Flask-SocketIO: даёт приложениям Flask доступ к низкой задержке двустороннего общения между клиентами и сервером.
  • Gorilla WebSocket: Gorilla WebSocket — это реализация протокола WebSocket для Go.

Спецификации

Спецификация
WebSockets
# the-websocket-interface

Совместимость с браузерами

Desktop Mobile
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android
WebSocketStream 124 124 No 110 No 124 No 82 No 27.0 124
WebSockets_API 124 124 No 110 No 124 No 82 No 27.0 124
close 124 124 No 110 No 124 No 82 No 27.0 124
closed 124 124 No 110 No 124 No 82 No 27.0 124
opened 124 124 No 110 No 124 No 82 No 27.0 124
url 124 124 No 110 No 124 No 82 No 27.0 124
Desktop Mobile
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android
WebSocket 5 12 117–11 12.1 5 18 147–14 12.1 4.2 1.0 4.4
WebSockets_API 5 12 11
7–11Message size limited to 16 MB (see bug 711205).
12.1 5 18 14
7–14Message size limited to 16 MB (see bug 711205).
12.1 4.2 1.0 4.4
binaryType 15 12 11 12.1 6 18 14 12.1 6 1.0 4.4
bufferedAmount 5 12 7 12.1 5 18 7 12.1 4.2 1.0 4.4
close 5 12 7 12.1 5 18 7 12.1 4.2 1.0 4.4
close_event 5 12 7 12.1 5 18 7 12.1 4.2 1.0 ≤37
error_event 5 12 7 12.1 5 18 7 12.1 4.2 1.0 ≤37
extensions 16 12 8 12.1 6 18 8 12.1 6 1.0 4.4
message_event 5 12 7 12.1 5 18 7 12.1 4.2 1.0 ≤37
open_event 5 12 7 12.1 5 18 7 12.1 4.2 1.0 ≤37
protocol 15 12 7 12.1 6 18 7 12.1 6 1.0 4.4
protocol_rfc_6455 16 12 11 15 6 18 14 14 6 1.0 ≤37
readyState 5 12 7 12.1 5 18 7 12.1 4.2 1.0 4.4
send 5 12 18
11–18Only parameter of type ArrayBuffer and String supported.
8–11Only parameter of type String supported.
7–8Only parameter of type String supported. Returns boolean.
12.1 5 18 18
14–18Only parameter of type ArrayBuffer and String supported.
8–14Only parameter of type String supported.
7–8Only parameter of type String supported. Returns boolean.
12.1 4.2 1.0 4.4
url 18 12 7 12.1 6 18 7 12.1 6 1.0 4.4
worker_support 5 12 37 12.1 5 18 37 12.1 5 1.0 ≤37

api.WebSocket

Таблицы BCD загружаются только в браузере

api.WebSocketStream

Таблицы BCD загружаются только в браузере

См. также

  • RFC 6455 — Протокол WebSocket
  • Спецификация API WebSocket
  • События, отправляемые сервером

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API