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