Spec-Zone.ru › Socket.IO 3

Экземпляр сокета (клиентская сторона)

Помимо отправки и прослушивания событий, экземпляр сокета имеет несколько атрибутов, которые могут быть полезны в вашем приложении:

Socket#id

Каждое новое соединение получает случайный идентификатор из 20 символов.

Этот идентификатор синхронизирован со значением на серверной стороне.

// server-side
io.on("connection", (socket) => {
  console.log(socket.id); // x8WIv7-mJelg7on_ALbx
});

// client-side
socket.on("connect", () => {
  console.log(socket.id); // x8WIv7-mJelg7on_ALbx
});

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

Socket#connected

Этот атрибут описывает, подключён ли сокет в данный момент к серверу.

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

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

Жизненный цикл

Lifecycle diagram

События

Экземпляр сокета отправляет три специальных события:

  • connect
  • connect_error
  • disconnect

Обратите внимание, что с версии Socket.IO v3 экземпляр сокета больше не отправляет никаких событий, связанных с логикой повторного подключения. Вы можете прослушивать события напрямую на экземпляре менеджера:

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

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

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

connect

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

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

Обратите внимание, что вы не должны регистрировать обработчики событий в самом обработчике connect, так как каждый раз при повторном подключении сокета будет регистрироваться новый обработчик:

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

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

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

connect_error

Это событие срабатывает, когда:

  • невозможно установить низкоуровневое соединение
  • соединение отклоняется сервером в функции обработчика среды

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

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

// either by directly modifying the `auth` attribute
socket.on("connect_error", () => {
  socket.auth.token = "abcd";
  socket.connect();
});

// or if the `auth` attribute is a function
const socket = io({
  auth: (cb) => {
    cb(localStorage.getItem("token"));
  }
});

socket.on("connect_error", () => {
  setTimeout(() => {
    socket.connect();
  }, 1000);
});

disconnect

Это событие срабатывает при отключении.

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

Вот список возможных причин:

Причина Описание
io server disconnect Сервер принудительно отключил сокет с помощью socket.disconnect()
io client disconnect Сокет был отключён вручную с помощью socket.disconnect()
ping timeout Сервер не отправил PING в течение pingInterval + pingTimeout диапазона
transport close Соединение было закрыто (например, пользователь потерял соединение или сеть изменилась с WiFi на 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
});

Примечание: эти события, наряду с disconnecting, newListener и removeListener, являются специальными событиями, которые не следует использовать в вашем приложении:

// BAD, will throw an error
socket.emit("disconnect");

Полный API

Полный API, предоставляемый экземпляром сокета, можно найти здесь.

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

Spec-Zone.ru

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