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 в предпочтительном порядке. В ответах он указывает расширение, выбранное сервером из предпочтений клиента.
Руководства
Инструменты
- 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 | 117–11Message size limited to 16 MB (see bug 711205). |
12.1 | 5 | 18 | 147–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 | 1811–18Only parameter of typeArrayBuffer and String supported.8–11Only parameter of typeString supported.7–8Only parameter of typeString supported. Returns boolean. |
12.1 | 5 | 18 | 1814–18Only parameter of typeArrayBuffer and String supported.8–14Only parameter of typeString supported.7–8Only parameter of typeString 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 загружаются только в браузере
См. также
© 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