Spec-Zone.ru › Socket.IO 3

API клиента

IO

Представлен в виде пространства имён io в автономной сборке или в результате вызова require("socket.io-client").

<script src="/socket.io/socket.io.js"></script>
<script>
  const socket = io("http://localhost");
</script>
const io = require("socket.io-client");
// or with import syntax
import { io } from "socket.io-client";

io.protocol

  • (Число)

Номер версии протокола (в настоящее время: 5).

Протокол определяет формат пакетов, обмениваемых между клиентом и сервером. Клиент и сервер должны использовать одну и ту же версию для взаимного понимания.

Дополнительную информацию можно найти здесь.

io([url][, options])

  • url (Строка) (по умолчанию window.location)
  • options (Объект)
    • forceNew (Булево), следует ли повторно использовать существующее соединение
  • Возвращает Socket

Создаёт новый Manager для заданного URL и пытается повторно использовать существующее Manager для последующих вызовов, если не указан параметр multiplex со значением false. Передача этого параметра эквивалентна передаче "force new connection": true или forceNew: true.

Возвращается новый экземпляр Socket для пространства имён, указанного в пути к URL, по умолчанию /. Например, если url является http://localhost/users, будет установлено транспортное соединение с http://localhost и соединение Socket.IO с /users.

Параметры запроса также могут быть предоставлены, либо с параметром query или непосредственно в URL (пример: http://localhost/users?token=abc).

const io = require("socket.io-client");

const socket = io("ws://example.com/my-namespace", {
  reconnectionDelayMax: 10000,
  auth: {
    token: "123"
  },
  query: {
    "my-key": "my-value"
  }
});

является сокращенной записью:

const { Manager } = require("socket.io-client");

const manager = new Manager("ws://example.com", {
  reconnectionDelayMax: 10000,
  query: {
    "my-key": "my-value"
  }
});

const socket = manager.socket("/my-namespace", {
  auth: {
    token: "123"
  }
});

См. new Manager(url[, options]) для списка доступных options.

Обратите внимание: manager.socket("/my-namespace", options ) будет считывать только параметр auth в объекте options. query: {…} и другие необязательные параметры используются только при передаче через экземпляр new Manager(uri, options).

См. Миграция с 2.x на 3.0 для получения дополнительной информации о различиях между параметрами auth и query.

Менеджер

Manager *управляет* экземпляром клиента Engine.IO client, который представляет собой низкоуровневый движок, устанавливающий соединение с сервером (используя такие транспорты, как WebSocket или HTTP long-polling).

Manager обрабатывает логику повторного подключения.

Один Manager может использоваться несколькими сокет-объектами. Дополнительную информацию об этой функции множественного использования можно найти здесь.

Обратите внимание, что в большинстве случаев вы не будете использовать Manager напрямую, а вместо этого будете использовать экземпляр Socket.

new Manager(url[, options])

  • url (Строка)
  • options (Объект)
  • Возвращает Manager

Доступные параметры:

Параметр Значение по умолчанию Описание
path /socket.io имя пути, которое используется на стороне сервера
reconnection true автоматически подключаться повторно
reconnectionAttempts Infinity количество попыток повторного подключения, прежде чем прекратить попытки
reconnectionDelay 1000 время начальной задержки перед повторным подключением. Зависит от +/- randomizationFactor, например, начальная задержка по умолчанию будет находиться в пределах от 500 до 1500 мс.
reconnectionDelayMax 5000 максимальное время ожидания между повторными подключениями. При каждой попытке время повторного подключения увеличивается в 2 раза с рандомизирующим фактором.
randomizationFactor 0.5 0 ≤ коэффициент_рандомизации ≤ 1
timeout 20000 таймаут соединения до отправки события error
autoConnect true установив это значение в false, необходимо вызывать manager.open всякий раз, когда это уместно
query {} дополнительные параметры запроса, которые отправляются при подключении к пространству имен (затем обнаружены в объекте socket.handshake.query на стороне сервера)
parser - используемый парсер. По умолчанию используется экземпляр Parser из socket.io. См. socket.io-parser.

Доступные параметры для подлежащего клиента Engine.IO:

Параметр Значение по умолчанию Описание
upgrade true должен ли клиент пытаться улучшить транспорт с long-polling до чего-то лучшего.
forceJSONP false принудительное использование JSONP для polling-транспорта.
jsonp true определяет, использовать ли JSONP при необходимости для polling. Если отключено (установлено в false), будет отправлено сообщение об ошибке («Нет доступных транспортов»), если другие транспорты недоступны. Если доступен другой транспорт для открытия соединения (например, WebSocket), будет использован этот транспорт вместо него.
forceBase64 false принудительное использование кодирования base64 для polling-транспорта, даже если доступен XHR2 responseType, и WebSocket, даже если используемый стандарт поддерживает двоичные данные.
enablesXDR false включает XDomainRequest для IE8, чтобы избежать мерцания панели загрузки с звуком щелчка. По умолчанию установлено в false, потому что XDomainRequest имеет недостаток, заключающийся в том, что он не отправляет cookie.
timestampRequests - добавлять ли отметку времени к каждому запросу транспорта. Примечание: запросы опроса всегда имеют отметку времени, если этот параметр явно не установлен в false
timestampParam t параметр отметки времени
transports ["polling", "websocket"] список транспортов для попытки (в порядке). Engine всегда пытается подключиться напрямую к первому, при условии, что тест обнаружения функции для него пройден.
transportOptions {} хэш опций, индексированный по имени транспорта, переопределяющий общие параметры для данного транспорта
rememberUpgrade false Если true, и если предыдущее подключение websocket к серверу прошло успешно, попытка подключения обойдет обычный процесс обновления и сначала попробует websocket. Попытка подключения после ошибки транспорта будет использовать обычный процесс обновления. Рекомендуется включить это только при использовании соединений SSL/TLS или если известно, что ваша сеть не блокирует websocket.
onlyBinaryUpgrades false следует ли ограничивать обновление транспорта транспортом, поддерживающим двоичные данные
requestTimeout 0 таймаут для запросов xhr-polling в миллисекундах (0) (только для polling-транспорта)
protocols - список субпротоколов (см. ссылку MDN) (только для websocket-транспорта)

Параметры, доступные только в Node.js для подлежащего клиента Engine.IO:

Параметр Значение по умолчанию Описание
agent false используемый http.Agent
pfx - Сертификат, закрытый ключ и сертификаты CA для использования с SSL.
key - Закрытый ключ для использования с SSL.
passphrase - Строка пароля для закрытого ключа или pfx.
cert - Открытый x509-сертификат для использования.
ca - Сертификат авторитета или массив сертификатов авторитета для проверки удалённого хоста.
ciphers - Строка, описывающая используемые или исключённые шифры. Обратитесь к списку форматов шифров для получения подробной информации.
rejectUnauthorized true Если true, сертификат сервера проверяется по списку предоставленных CA. Если проверка завершится неудачей, будет отправлено событие «ошибка». Проверка происходит на уровне соединения, до отправки HTTP-запроса.
perMessageDeflate true параметры расширения WebSocket permessage-deflate (см. документацию модуля ws). Установите в false для отключения.
extraHeaders {} Заголовки, которые будут передаваться при каждом запросе на сервер (через xhr-polling и через websocket). Эти значения затем могут использоваться во время рукопожатия или для специальных прокси.
forceNode false Использует реализацию NodeJS для websocket - даже если доступен родной WebSocket браузера, который по умолчанию предпочтительнее реализации NodeJS. (Это полезно при использовании гибридных платформ, таких как nw.js или electron)
localAddress - локальный IP-адрес для подключения

manager.reconnection([value])

  • value (Булево)
  • Возвращает Manager|Boolean

Устанавливает параметр reconnection, или возвращает его, если параметры не переданы.

manager.reconnectionAttempts([value])

  • value (Число)
  • Возвращает Manager|Number

Устанавливает параметр reconnectionAttempts, или возвращает его, если параметры не переданы.

manager.reconnectionDelay([value])

  • value (Число)
  • Возвращает Manager|Number

Устанавливает параметр reconnectionDelay, или возвращает его, если параметры не переданы.

manager.reconnectionDelayMax([value])

  • value (Число)
  • Возвращает Manager|Number

Устанавливает параметр reconnectionDelayMax, или возвращает его, если параметры не переданы.

manager.timeout([value])

  • value (Число)
  • Возвращает Manager|Number

Устанавливает параметр timeout, или возвращает его, если параметры не переданы.

manager.open([callback])

  • callback (Функция)
  • Возвращает Manager

Если менеджер был инициирован с autoConnect в false, запускает новую попытку подключения.

Аргумент callback является необязательным и будет вызван после того, как попытка завершится успешно или с ошибкой.

manager.connect([callback])

Синоним manager.open([callback]).

manager.socket(nsp, options)

  • nsp (Строка)
  • options (Объект)
  • Возвращает Socket

Создаёт новый Socket для данного пространства имён. Только auth ({ auth: {key: "value"} }) считывается из объекта options. Другие ключи будут проигнорированы и должны быть переданы при создании экземпляра new Manager(nsp, options).

Событие: ‘error’

  • error (Объект) объект ошибки

Вызывается при ошибке подключения.

Событие: ‘reconnect’

  • attempt (Число) номер попытки переподключения

Вызывается при успешном переподключении.

Событие: ‘reconnect_attempt’

  • attempt (Число) номер попытки переподключения

Вызывается при попытке переподключения.

Событие: ‘reconnect_error’

  • error (Объект) объект ошибки

Вызывается при ошибке попытки переподключения.

Событие: ‘reconnect_failed’

Вызывается, когда не удалось переподключиться в течение reconnectionAttempts.

Событие: ‘ping’

Вызывается при получении пакета ping от сервера.

Сокет

A Socket — это базовый класс для взаимодействия с сервером. A Socket принадлежит определённому пространству имён (по умолчанию /) и использует базовый менеджер для связи.

A Socket — это по сути EventEmitter, который отправляет события на сервер и получает события от него через сеть.

socket.emit("hello", { a: "b", c: [] });

socket.on("hey", (...args) => {
  // ...
});

Дополнительную информацию можно найти здесь.

socket.id

  • (Строка)

Уникальный идентификатор сессии сокета. Устанавливается после срабатывания события connect и обновляется после события reconnect.

const socket = io("http://localhost");

console.log(socket.id); // undefined

socket.on("connect", () => {
  console.log(socket.id); // "G5p5..."
});

socket.connected

  • (Булево)

Соединение с сервером установлено или нет.

const socket = io("http://localhost");

socket.on("connect", () => {
  console.log(socket.connected); // true
});

socket.disconnected

  • (Булево)

Соединение с сервером разорвано или нет.

const socket = io("http://localhost");

socket.on("connect", () => {
  console.log(socket.disconnected); // false
});

socket.open()

  • Возвращает Socket

Вручную открывает сокет.

const socket = io({
  autoConnect: false
});

// ...
socket.open();

Также может использоваться для ручного переподключения:

socket.on("disconnect", () => {
  socket.open();
});

socket.connect()

Синоним socket.open().

socket.send([…args][, ack])

  • args
  • ack (Функция)
  • Возвращает Socket

Отправляет событие message. Смотрите socket.emit(eventName[, …args][, ack]).

socket.emit(eventName[, …args][, ack])

  • eventName (Строка)
  • args
  • ack (Функция)
  • Возвращает true

Вызывает событие с заданным строковым именем. Можно передать любые дополнительные параметры. Поддерживаются все сериализуемые структуры данных, включая Buffer.

socket.emit("hello", "world");
socket.emit("with-binary", 1, "2", { 3: "4", 5: Buffer.from([6, 7, 8]) });

Аргумент ack является необязательным и будет вызван с ответом сервера.

socket.emit("ferret", "tobi", (data) => {
  console.log(data); // data will be "woot"
});

// server:
//  io.on("connection", (socket) => {
//    socket.on("ferret", (name, fn) => {
//      fn("woot");
//    });
//  });

socket.on(eventName, callback)

  • eventName (Строка)
  • callback (Функция)
  • Возвращает Socket

Регистрирует обработчик для заданного события.

socket.on("news", (data) => {
  console.log(data);
});

// with multiple arguments
socket.on("news", (arg1, arg2, arg3, arg4) => {
  // ...
});
// with callback
socket.on("news", (cb) => {
  cb(0);
});

Сокет наследует все методы класса Emitter, такие как hasListeners, once или off (для удаления обработчика события).

socket.onAny(callback)

  • callback (Функция)

Регистрирует универсальный обработчик событий.

socket.onAny((event, ...args) => {
  console.log(`got ${event}`);
});

socket.prependAny(callback)

  • callback (Функция)

Регистрирует универсальный обработчик событий. Обработчик добавляется в начало массива обработчиков.

socket.prependAny((event, ...args) => {
  console.log(`got ${event}`);
});

socket.offAny([listener])

  • listener (Функция)

Удаляет ранее зарегистрированный обработчик. Если обработчик не передан, все универсальные обработчики удаляются.

const myListener = () => { /* ... */ };

socket.onAny(myListener);

// then, later
socket.offAny(myListener);

socket.offAny();

socket.listenersAny()

  • Возвращает Function[]

Возвращает список зарегистрированных универсальных обработчиков.

const listeners = socket.listenersAny();

socket.compress(value)

  • value (Булево)
  • Возвращает Socket

Устанавливает модификатор для последующей отправки события, что данные события будут сжаты только если значение равно true. По умолчанию true если метод не вызывается.

socket.compress(false).emit("an event", { some: "data" });

socket.close()

  • Возвращает Socket

Вручную отключает сокет.

socket.disconnect()

Синоним socket.close().

Событие: ‘connect’

Вызывается при подключении к пространству имён (включая успешное переподключение).

socket.on("connect", () => {
  // ...
});

// note: you should register event handlers outside of connect,
// so they are not registered again on reconnection
socket.on("myevent", () => {
  // ...
});

Событие: ‘disconnect’

  • reason (Строка)

Вызывается при разрыве соединения. Список возможных причин разрыва соединения:

Причина Описание
io server disconnect Сервер принудительно отключил сокет с помощью socket.disconnect()
io client disconnect Сокет был отключён вручную с помощью socket.disconnect()
ping timeout Сервер не отправил PING в течение pingInterval + pingTimeout диапазона
transport close Соединение было закрыто (например, пользователь потерял подключение или сеть изменилась с Wi-Fi на 4G)
transport error Соединение столкнулось с ошибкой (например, сервер был убит во время цикла HTTP long-polling)

В первых двух случаях (явное отключение) клиент не будет пытаться переподключиться, и вам необходимо вручную вызвать socket.connect().

Во всех остальных случаях клиент будет ждать небольшой случайной задержки и затем попытается переподключиться:

socket.on("disconnect", (reason) => {
  if (reason === "io server disconnect") {
    // the disconnection was initiated by the server, you need to reconnect manually
    socket.connect();
  }
  // else the socket will automatically try to reconnect
});

Событие: ‘connect_error’

  • connect_error (Объект) объект ошибки

Вызывается при ошибке middleware пространства имён.

socket.on("connect_error", (error) => {
  // ...
});

© 2014–2021 Automattic
Licensed under the MIT License.
https://socket.io/docs/v3/client-api

Spec-Zone.ru

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